2014-07-11 2 views
0

일반적으로 열에 문자열이 들어 있는지 여부를 묻는 SQLite는 다음 행을 따라 쿼리를 사용합니다. SELECT * FROM table WHERE column LIKE '%' || ? || '%'.열에 문자열이 포함되어있는 경우 어떻게 SQLite에 요청합니까?

주요 문제는 내가 검색 할 문자열이 % 일 경우 무엇입니까?

나는 현재 str_replace(search, '%, '%%')과 같은 것으로 검색하고있는 문자열을 이스케이프 처리합니다. 내가 %의 간단한 문자열에 적용 할 때 이것은 두 개의 이스케이프 된 퍼센트 인 %%%%과 같은 문자열을 나타냅니다. 또한 이스케이프 문자로 시작하는 문자열의 경우 어떻게됩니까? %hello%%%hello이되며, 이는 %으로 이스케이프되며 그 다음에 임의의 문자 수와 hello가옵니다.

나는 이스케이프 문자를 바꿀 수 있지만 새로운 이스케이프 문자는 같은 문제가 있습니다.

참고 : 저는 instr을 사용할 수 있지만이 문제에 대한 해결책이 있는지 궁금합니다.

답변

1

_%과 같은 LIKE 패턴 문자를 두 배로 이스케이프 처리 할 수 ​​없습니다.

the documentation에 따르면, 다음과 같은 문자의 특별한 의미를 제거하는 문자를 정의 할 ESCAPE 절을 추가 할 수 있습니다

SELECT * FROM MyTable WHERE MyColumn LIKE '%' || ? || '%' ESCAPE '@' 

그런 다음 검색 문자열 %hello@%hello로 이스케이프해야 할 것을; 마찬가지로 [email protected][email protected]@example.org으로 이스케이프되어야합니다.

+0

알겠습니다. 그 혼란을 해결해 주셔서 감사합니다. – chacham15

+0

와일드 카드 문자가 이스케이프 문자 일 경우 어떻게해야합니까? 이 경우 %%는 효과적으로 %로 변환됩니다. – Tarik

+0

@ 타리크 어리석은 행동 일 것입니다. –

관련 문제