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.