[sql] SQL LIKE 절의 특수 문자 목록

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. () -함께 항목 그룹화

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



답변

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이 아닌 모든 저자의 성.


답변

ANSI SQL92 :

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

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

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

감사합니다 SQL! gnnn


답변

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

스미스-> 스미스


답변

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."


답변

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 '~'키워드가 유사한 표현식 내에서 사용하기 위해 문자열의 자동 이스케이프를 허용 할 수있는 것처럼 보입니다.


답변