SQL- 문자열 검색 중 대소 문자 무시


130


테이블
PriceOrderShipped
PriceOrderShippedInbound
PriceOrderShippedOutbound 에 다음 데이터가 있습니다 .SQL

에서 테이블에서 문자열을 검색하는 쿼리를 작성해야합니다. 문자열을 검색하는 동안 대소 문자를 무시해야합니다. 아래 언급 된 SQL 쿼리

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

위의 모든 데이터를 제공하지만

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

제공하지 않습니다.

예 : 'PriceOrder'또는 'priceOrder'를 검색하면 작동하지만 'priceorder'또는 'Priceorder'는 작동하지 않습니다. COLLATE를 사용하여 아래 쿼리를 시도했지만 작동하지 않습니다. 내가 어디로 잘못 가고 있는지 알려주십시오.

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

답변:


232

이런 식으로 사용하십시오-

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

또는

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

14
필자는 항상 대문자로 된 문자열 (UPPER)을 모범 사례로 비교해야한다고 생각합니다. Google "turkish i"
Traubenfuchs

2
알고 싶은 당신의 대답은에 열 값을 변환하여 어떤 성능 문제가 않습니다 UPPER또는 LOWER경우 다음을 사용하여 LIKE검색을?
shaijut

실제로 일부 문자는 대문자가 다르지만 소문자가 같기 때문에 실제로 UPPER 및 LOWER 변형을 모두 비교해야합니다. 다른 문자의 경우 그 반대 일 수 있습니다. Java는 대소 문자를 구분하지 않는 비교에서 추가 toLowerCase ()를 수행하는 이유로 특히 그루지야 문자를 언급합니다.
Crusha K. Rool

1
불행하게도,이 방법은이 게시물에 설명 된대로 전체 테이블 스캔이 발생합니다 alvinalexander.com/sql/...은 . 필터링 된 열은 UPPER / LOWER 기능으로 수정되므로 인덱스 검색을 적용 할 수 없습니다.
Jeff S.

상 / 하한 쿼리 성능이 충분하지 않은 경우 (인덱스를 만들기 전에) 데이터 정렬을 설정하는 것이 더 나은 방법 인 것 같습니다.
Jeff S.

10

대소 문자를 구분하지 않고 검색 할 때 이와 유사한 질문과 답변을 참조하십시오. SQL Server는 where 식에서 대소 문자를 무시합니다.

다음과 같은 것을 사용해보십시오.

SELECT DISTINCT COL_NAME 
FROM myTable 
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'

Collate 이전에 SQL 쿼리가 제대로 종료되지 않습니다.
shockwave

@ Miguel-F .. 그것은 잘 작동하지만 나에게 잘 작동하기 때문에 myTable WHERE COL_NAME LIKE '% priceorder %'에서 SELECT DISTINCT COL_NAME과 어떻게 다릅니 까?
Jishant

대신 'SQL_Latin1_General_Cp1_CI_AS_KI_WI'를 사용하는 것이 좋습니다. 이음새에는 대단하지 않습니다.
user8155123

8

이렇게

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

postgresql에서.


4
이 질문에는 sql-server 태그가 붙어 있으므로 postgres 답변은 관련이 없습니다.
Liam

4

SQL_Latin1_General_Cp1_CI_AS_KI_WI데이터 정렬로 사용해야 합니다. 질문에 지정한 것은 대소 문자를 구분합니다.

데이터 정렬 목록은 여기에서 볼 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.