Оболочка заменяет звездочку именем каждого файла в каталоге.
Чтобы передать буквальную звездочку, вы должны быть в состоянии избежать ее:
$ ./a.out 123 \*
Вы можете использовать COLLATE NOCASE
в своем запросе SELECT
:
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
Кроме того, в SQLite вы можете указать, что столбец должен быть нечувствительным к регистру когда вы создаете таблицу, указав collate nocase
в определении столбца (другие параметры - binary
(по умолчанию) и rtrim
; см. здесь ). Вы также можете указать collate nocase
при создании индекса. Например:
create table Test ( Text_Value text collate nocase ); insert into Test values ('A'); insert into Test values ('b'); insert into Test values ('C'); create index Test_Text_Value_Index on Test (Text_Value collate nocase);
Выражения, содержащие Test.Text_Value
, теперь должны быть нечувствительными к регистру. Например:
sqlite> select Text_Value from Test where Text_Value = 'B'; Text_Value ---------------- b sqlite> select Text_Value from Test order by Text_Value; Text_Value ---------------- A b C sqlite> select Text_Value from Test order by Text_Value desc; Text_Value ---------------- C b A
Оптимизатор также потенциально может использовать индекс для поиска и сопоставления без учета регистра в столбце. Вы можете проверить это с помощью команды SQL объяснять
, например:
sqlite> explain select Text_Value from Test where Text_Value = 'b'; addr opcode p1 p2 p3 ---------------- -------------- ---------- ---------- --------------------------------- 0 Goto 0 16 1 Integer 0 0 2 OpenRead 1 3 keyinfo(1,NOCASE) 3 SetNumColumns 1 2 4 String8 0 0 b 5 IsNull -1 14 6 MakeRecord 1 0 a 7 MemStore 0 0 8 MoveGe 1 14 9 MemLoad 0 0 10 IdxGE 1 14 + 11 Column 1 0 12 Callback 1 0 13 Next 1 9 14 Close 1 0 15 Halt 0 0 16 Transaction 0 0 17 VerifyCookie 0 4 18 Goto 0 1 19 Noop 0 0
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
Вы можете сделать это так:
SELECT * FROM ... WHERE name LIKE 'someone'
(Это не решение , но в некоторых случаях очень удобно)
" LIKE оператор выполняет шаблон сравнение соответствия. Операнд для справа содержит узор, левый операнд содержит строку чтобы соответствовать шаблону. А символ процента ("%") в шаблоне соответствует любой последовательности из нуля или более символы в строке. An подчеркивание ("_") в шаблоне соответствует любому одиночному символу в строка. Любой другой символ соответствует самому или его эквиваленту в нижнем / верхнем регистре (т. Е. Соответствие без учета регистра ) . (Ошибка: только SQLite понимает верхний / нижний регистр для ASCII персонажи. Оператор LIKE - это регистр чувствителен к символам Юникода, которые выходят за пределы диапазона ASCII. Для Например, выражение 'a' LIKE 'A' ИСТИНА, но 'æ' КАК 'Æ' - ЛОЖЬ.) "
Это не относится к sqlite, но вы можете просто сделать
SELECT * FROM ... WHERE UPPER(name) = UPPER('someone')