SQL LIKE 절의 특수 문자 목록


119

SQL에 대한 모든 특수 문자의 전체 목록은 무엇입니까 (SQL Server에 관심이 있지만 다른 문자도 좋습니다) LIKE 절?

예

SELECT Name FROM Person WHERE Name LIKE '%Jon%'

SQL 서버 :

  1. %
  2. _
  3. [지정자] 예 : [az]
  4. [^ 지정자]
  5. ESCAPE 절 예 : % 30! %% 'ESCAPE'! ' 30 %가 사실로 평가됩니다.
  6. '문자는'로 이스케이프해야합니다.

MySQL :

  1. % -0 개 이상의 문자로 구성된 모든 문자열입니다.
  2. _ -모든 단일 문자
  3. ESCAPE 절 예 : % 30! %% 'ESCAPE'! ' 30 %가 사실로 평가됩니다.

신탁:

  1. % -0 개 이상의 문자로 구성된 모든 문자열입니다.
  2. _ -모든 단일 문자
  3. ESCAPE 절 예 : % 30! %% 'ESCAPE'! ' 30 %가 사실로 평가됩니다.

Sybase

  1. %
  2. _
  3. [지정자] 예 : [az]
  4. [^ 지정자]

진행:

  1. % -0 개 이상의 문자로 구성된 모든 문자열입니다.
  2. _ -모든 단일 문자

    여기에 참조 가이드 [PDF]

PostgreSQL :

  1. % -0 개 이상의 문자로 구성된 모든 문자열입니다.
  2. _ -모든 단일 문자
  3. ESCAPE 절 예 : % 30! %% 'ESCAPE'! ' 30 %가 사실로 평가됩니다.

ANSI SQL92 :

  1. %
  2. _
  3. 지정된 경우에만 ESCAPE 문자 .

PostgreSQL SIMILAR TO에는 다음을 추가하는 연산자 도 있습니다 .

  1. [specifier]
  2. [^specifier]
  3. | -두 가지 대안 중 하나
  4. * -이전 항목을 0 회 이상 반복합니다.
  5. + -이전 항목을 한 번 이상 반복합니다.
  6. () -함께 항목 그룹화

아이디어는 이것을위한 "원 스톱 상점"이 될 수있는 커뮤니티 위키를 만드는 것입니다.


ESCAPE 절을 언급 할 가치가있을 것입니다. SQL Server, Oracle 및 MySQL은 모두이를 지원합니다. Sybase에 대해 모릅니다.
— Dave Webb

나는 지금 ESCAPE 절 그렇게 아마 한 번만 언급 할 필요가 표준 SQL이다 생각하고 있어요
— 데이브 웹이

나열된 모든 서버 (및 나중에 추가 될 수있는 서버)에서 구현된다는 사실을 모르기 때문에 "모든 지원"섹션으로 가져가는 것을 꺼려합니다. 모두 지원된다는 확신이 들면 계속 진행하십시오.
— Jonathan Parker

이스케이프 문자 자체 ... 탈출하는 것을 잊지 마세요
— 크리스토퍼 Hammarström

두 개의 댓글. 첫째, Microsoft SQL은 처음에 Sybase에서 제공되므로 유사성이 우연이 아닙니다. 둘째, 작은 따옴표를 다른 따옴표로 이스케이프하는 것은 다음으로 제한되지 않습니다 LIKE. 예를 들면 WHERE familyname = 'O''Toole'. 셋째, SIMILAR TO연산자는 자체 기능 (및 더 많은 특수 문자)이있는 일종의 하이브리드 정규식을 도입하므로 여기에 포함해서는 안됩니다. 나는 그것이 3 개의 코멘트를하는 것 같지만, 아무도 스페인 종교 재판을 기대하지 않는다.
— Manngo

답변:


22

SQL Server의 경우에서 http://msdn.microsoft.com/en-us/library/ms179859.aspx :

  • % 0 개 이상의 문자로 구성된 모든 문자열.

    WHERE title LIKE '%computer%' 책 제목에 '컴퓨터'라는 단어가 포함 된 모든 책 제목을 찾습니다.

  • _ 모든 단일 문자.

    WHERE au_fname LIKE '_ean' ean (Dean, Sean 등)으로 끝나는 4 자로 된 이름을 모두 찾습니다.

  • [] 지정된 범위 ([af]) 또는 집합 ([abcdef]) 내의 모든 단일 문자.

    WHERE au_lname LIKE '[C-P]arsen'arsen으로 끝나고 C와 P 사이의 단일 문자로 시작하는 저자 성을 찾습니다 (예 : Carsen, Larsen, Karsen 등). 범위 검색에서 범위에 포함 된 문자는 데이터 정렬의 정렬 규칙에 따라 다를 수 있습니다.

  • [^] 지정된 범위 ([^ af]) 또는 집합 ([^ abcdef]) 내에없는 단일 문자입니다.

    WHERE au_lname LIKE 'de[^l]%' de로 시작하고 다음 문자가 l이 아닌 모든 저자의 성.


1
방금 시도했는데 할 수있는 것 같습니다. [0123456789] :하지만 정규 표현식처럼 아니다 => [0-9] 대신에이 같은 각 문자 지정해야합니다
— Çağdaş Tekin입니다

3
잠깐만 요. RegEx와 같으므로 [0-9]도 작동합니다. 혼란을 드려 죄송합니다.
— Çağdaş Tekin

6

ANSI SQL92 :

  • %
  • _
  • 지정된 경우에만 ESCAPE 문자 .

많은 데이터베이스가 표준 규칙을 고수하지 않고 추가 문자를 추가하거나 누락 된 경우 기본값 '\'으로 ESCAPE를 잘못 활성화하는 것은 실망스러운 일입니다. 이미 '\'에 문제가없는 것처럼!

여기서 DBMS에 독립적 인 코드를 작성하는 것은 불가능합니다. 왜냐하면 어떤 문자를 이스케이프해야하는지 모르기 때문이며 표준은 이스케이프 할 필요가없는 것은 이스케이프 할 수 없다고 말합니다. (섹션 8.5 / 일반 규칙 /3.a.ii 참조)

감사합니다 SQL! gnnn


5

SQL Server에서 기존의 '를 이스케이프하려면'을 추가해야한다고 추가해야합니다.

스미스-> 스미스


1

Sybase :

%              : Matches any string of zero or more characters.
_              : Matches a single character.
[specifier]    : Brackets enclose ranges or sets, such as [a-f] 
                 or [abcdef].Specifier  can take two forms:

                 rangespec1-rangespec2: 
                   rangespec1 indicates the start of a range of characters.
                   - is a special character, indicating a range.
                   rangespec2 indicates the end of a range of characters.

                 set: 
                  can be composed of any discrete set of values, in any 
                  order, such as [a2bR].The range [a-f], and the 
                  sets [abcdef] and [fcbdae] return the same 
                  set of values.

                 Specifiers are case-sensitive.

[^specifier]    : A caret (^) preceding a specifier indicates 
                  non-inclusion. [^a-f] means "not in the range 
                  a-f"; [^a2bR] means "not a, 2, b, or R."

0

SQL Server에 대한 잠재적 인 답변

흥미롭게도 Linq to SQL을 실행해야하는 SQL Server와 함께 LinqPad를 사용하여 테스트를 실행했으며 다음 SQL 문을 생성합니다.

레코드 .Where (r => r.Name.Contains ( "lkjwer --_ ~ []"))

-- Region Parameters
DECLARE @p0 VarChar(1000) = '%lkjwer--~_~~~[]%'
-- EndRegion
SELECT [t0].[ID], [t0].[Name]
FROM [RECORDS] AS [t0]
WHERE [t0].[Name] LIKE @p0 ESCAPE '~'

그래서 나는 그것을 아직 테스트하지 않았지만 잠재적으로 ESCAPE '~'키워드가 유사한 표현식 내에서 사용하기 위해 문자열의 자동 이스케이프를 허용 할 수있는 것처럼 보입니다.


그들은 아마 사용하고있는 ESCAPE이 두 개의 이스케이프 문자 당 문자 (예, 사용 할 수 있기 때문에 %이된다 ~%) 대신 세 (예를하지 않고 ESCAPE, %이된다 [%]).
— binki apr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.