Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > SQLite3::регистронезависимое сравнение строк


Автор: NOCaut 2.2.2012, 11:58
CREATE TABLE a(b VARCHAR(20) COLLATE NOCASE)
с записями('Текст','тЕкст','текСт')

Непомогло:
1) добавление COLLATE NOCASE после оператора сравнения: ... WHERE a = b COLLATE NOCASE    
2) добавив CREATE TABLE somename(d VARCHAR(20) COLLATE NOCASE) 
3) select * from a where upper(b) like upper('текст')


Автор: Akina 2.2.2012, 12:03
Цитата

Note that only ASCII characters are case folded. SQLite does not attempt to do full UTF case folding due to the size of the tables required.
An application can register additional collating functions using the sqlite3_create_collation() interface.
http://www.sqlite.org/c3ref/create_collation.html

Автор: NOCaut 2.2.2012, 12:19
непонятно что с останним параметром делать?

Добавлено через 9 минут и 19 секунд
вроде так
Код

sqlite3_create_collation16(FDB, 'UNICODE', SQLITE_UTF16, nil, @UnicodeCompare));

function UnicodeCompare(UserData: Pointer; P1Size: Integer;
  P1: PWideChar; P2Size: Integer; P2: PWideChar): Integer; cdecl;
begin
  Result := CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE,
    P1, P1Size div SizeOf(WideChar), P2, P2Size div SizeOf(WideChar)) - CSTR_EQUAL;
end;

Автор: NOCaut 2.2.2012, 12:47
Да вопрос решон спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)