IT story

% 및 _와 같은 SQLite

hot-time 2020. 12. 28. 21:59
반응형

% 및 _와 같은 SQLite


SQLite like에서 밑줄 문자가 무엇을하는지 알 수 없습니다 . 와일드 카드 문자 %는 대부분의 다른 SQL 데이터베이스에서와 동일합니다.

그래서, 그 망할 _캐릭터는 무엇을합니까?


밑줄은 대부분의 다른 SQL 데이터베이스와 동일하며 단일 문자와 일치합니다 (즉 ., 정규식에서 와 동일 ). 로부터 미세 설명서 :

LIKE 패턴의 밑줄 ( "_")은 문자열의 단일 문자와 일치합니다.

예를 들면 :

-- The '_' matches the single 'c'
sqlite> select 'pancakes' like 'pan_akes';
1
-- This would need '__' to match the 'ca', only one '_' fails.
sqlite> select 'pancakes' like 'pan_kes';
0
-- '___' also fails, one too many '_'.
sqlite> select 'pancakes' like 'pan___kes';
0

그리고 결과가 의미가 있는지 확인하기 위해 SQLite는 부울에 0과 1을 사용합니다 .


LIKE표현식에서 다음과 같은 것은 표준 SQL입니다 .

  • %빈 문자를 포함하여 모든 문자 시퀀스와 일치합니다. .*정규식 과 동일합니다 .
  • _단일 문자와 일치합니다. .정규식 과 동일합니다 .
  • 당신은 탈출을위한 캐릭터를 선택할 수 있습니다 %, _그 자체 자체 :

    ... WHERE expr LIKE 'a_b%c\\d\%\_' ESCAPE '\'
    

    이것은 일치 a×b×××c\d%_하거나 일치 a×bc\d%_하지 abc\d%_않습니다 a×b×××cd%_.

Additionnally SQLite는 당신이이 GLOB것을 제외하고, 정확히 같은 방식으로 동작 키워드를 %하게 *하고 _이된다 ?.


@Benoit의 답변에 대한 부록 :

모든 표현식이 아닌 ESCAPE가장 최근 LIKE표현식에 적용됩니다 LIKE. 모두 탈출하려면 ESCAPE아래와 같이 여러 번 사용해야 합니다.

WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'

이 술어 foobar % 또는 baz 와 모든 문자 를 포함하는 값과 일치합니다 .


기록을 위해 XCode / Objective-C 환경에서 사용하는데 '\'가 작동하지 않습니다. 대신 다른 것을 사용하십시오 ...

백 슬래시 문자를 사용하는 C 스타일 이스케이프는 표준 SQL ( https://www.sqlite.org/lang_expr.html ) 이 아니기 때문에 지원되지 않습니다.

참조 URL : https://stackoverflow.com/questions/7323162/sqlite-like-and

반응형