SQL- Ignoruj ​​wielkość liter podczas wyszukiwania ciągu

130


Mam następujące dane w tabeli
PriceOrderShipped
PriceOrderShippedInbound
PriceOrderShippedOutbound

W SQL muszę napisać zapytanie, które wyszukuje ciąg w tabeli. Szukając łańcucha, należy ignorować wielkość liter. Dla poniższego zapytania SQL

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%' 

podaje wszystkie powyższe dane, natomiast

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%Priceorder%' 

nie daje.

Na przykład. kiedy wyszukuję „PriceOrder” lub „PriceOrder”, działa, ale „priceorder” lub „Priceorder” nie działa. Próbowałem z poniższym zapytaniem przy użyciu funkcji Sortuj, ale nie działa. Daj mi znać, gdzie idę źle.

SELECT DISTINCT COL_NAME FROM myTable WHERE 
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'
fala uderzeniowa
źródło

Odpowiedzi:

232

Użyj czegoś takiego -

SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')

lub

SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')
Aditya Kakirde
źródło
14
Myślę, że jako najlepszą praktykę należy zawsze porównywać napisy pisane wielkimi literami (UPPER). Google „turkish i”
Traubenfuchs
2
Chcesz wiedzieć, czy Twoja odpowiedź ma jakiś problem z wydajnością, konwertując wartość kolumny na wielkość liter UPPERlub wielkość LOWERliter, a następnie używając LIKEdo wyszukiwania?
shaijut
Właściwie musiałbyś porównać oba warianty UPPER i LOWER, ponieważ niektóre znaki mają różne reprezentacje dużymi literami, ale tę samą reprezentację małymi. W przypadku innych postaci może być odwrotnie. Java wymienia alfabet gruziński specjalnie jako powód wykonania dodatkowego toLowerCase () w porównaniu bez rozróżniania wielkości liter.
Crusha K. Rool
1
Niestety, takie podejście powoduje pełne skanowanie tabeli, jak opisano w tym poście: alvinalexander.com/sql/… . Nie można zastosować wyszukiwania indeksu, ponieważ filtrowana kolumna jest modyfikowana przez funkcję UPPER / LOWER.
Jeff S.
Ustawienie sortowania (przed utworzeniem indeksu) wydaje się być lepszym podejściem, jeśli wydajność zapytania z wyższą / niższą wartością nie jest wystarczająca.
Jeff S.,
10

Zobacz to podobne pytanie i odpowiedz na wyszukiwanie z uwzględnieniem wielkości liter - serwer SQL ignoruje wielkość liter w wyrażeniu gdzie

Spróbuj użyć czegoś takiego jak:

SELECT DISTINCT COL_NAME 
FROM myTable 
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'
Miguel-F
źródło
to nie działa. Otrzymałem zapytanie SQL, które nie zostało poprawnie zakończone przed Collate
shockwave
@ Miguel-F .. działa dobrze, ale czym różni się od SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '% priceorder%', ponieważ to również działa dobrze dla mnie ..
Jishant
Radziłbym zamiast tego używać „SQL_Latin1_General_Cp1_CI_AS_KI_WI”. W przypadku wyszukiwania nie ma sensu.
user8155123
8

Lubię to.

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME iLIKE '%Priceorder%'

W postgresql.

Hangk
źródło
4
To pytanie jest oznaczone tagiem sql-server, więc odpowiedź postgres nie jest istotna.
Liam
4

Powinieneś prawdopodobnie użyć SQL_Latin1_General_Cp1_CI_AS_KI_WIjako swojego porównania. W pytaniu podanym w pytaniu rozróżniana jest wielkość liter.

Możesz zobaczyć listę zestawień tutaj .


źródło