수색…


통사론

  • 와일드 카드 % : SELECT * FROM [테이블] WHERE [컬럼 이름] '% 값 %'

    와일드 카드 _ : SELECT * FROM [표] WHERE [열 이름] 'V_n %'

    [charlist]가있는 와일드 카드 : SELECT * FROM [table] WHERE [column_name] 'V [abc] n %'와 같습니다.

비고

WHERE 절의 LIKE 조건은 주어진 패턴과 일치하는 열 값을 검색하는 데 사용됩니다. 다음과 같은 두 개의 와일드 카드 문자를 사용하여 패턴이 형성됩니다.

  • % (Percentage Symbol) - 0 개 이상의 문자를 나타내는 데 사용됩니다.
  • _ (밑줄) - 단일 문자를 나타내는 데 사용됩니다.

매치가없는 패턴 매치

문자열의 시작 또는 끝 (또는 둘 다)에 추가 된 % 와일드 카드는 패턴의 시작 부분 또는 끝 부분의 0 개 이상의 문자가 일치하도록 허용합니다.

중간에 '%'를 사용하면 패턴의 두 부분 사이에 0 개 이상의 문자가 일치 할 수 있습니다.

이 Employees 테이블을 사용하려고합니다.

신분증 FName LName 전화 번호 관리자 ID DepartmentId 봉급 Hire_date
1 남자 존슨 2468101214 1 1 400 23-03-2005
2 소피 Amudsen 2479100211 1 1 400 11-01-2010
로니 스미스 2462544026 2 1 600 06-08-2015
4 산체스 2454124602 1 1 400 23-03-2005
5 힐데 옹이 2468021911 2 1 800 01-01-2000

다음 명령문은 Employees 테이블에서 'on'문자열을 포함하는 FName 갖는 모든 레코드를 찾습니다.

SELECT * FROM Employees WHERE FName LIKE '%on%';
신분증 FName LName 전화 번호 관리자 ID DepartmentId 봉급 Hire_date
R on ny 스미스 2462544026 2 1 600 06-08-2015
4 J 산체스 2454124602 1 1 400 23-03-2005

다음 명령문은 Employees에서 '246'문자열로 시작하는 PhoneNumber를 갖는 모든 레코드와 일치합니다.

SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
신분증 FName LName 전화 번호 관리자 ID DepartmentId 봉급 Hire_date
1 남자 존슨 246 8101214 1 1 400 23-03-2005
로니 스미스 246 2544026 2 1 600 06-08-2015
5 힐데 옹이 246 8021911 2 1 800 01-01-2000

다음 명령문은 Employees에서 '11'문자열로 끝나는 PhoneNumber를 갖는 모든 레코드를 찾습니다.

SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
신분증 FName LName 전화 번호 관리자 ID DepartmentId 봉급 Hire_date
2 소피 Amudsen 24791002 11 1 1 400 11-01-2010
5 힐데 옹이 24680219 11 2 1 800 01-01-2000

Fname 세 번째 문자 가 Employees에서 'n'인 모든 레코드입니다.

SELECT * FROM Employees WHERE FName LIKE '__n%';

(두 개의 밑줄은 처음 두 문자를 건너 뛰기 전에 'n'앞에 사용됩니다)

신분증 FName LName 전화 번호 관리자 ID DepartmentId 봉급 Hire_date
로니 스미스 2462544026 2 1 600 06-08-2015
4 산체스 2454124602 1 1 400 23-03-2005

단일 문자 일치

구조화 된 쿼리 언어 (SQL-SELECT) 문을 확장하려면 백분율 기호 (%)와 밑줄 (_)을 사용할 수 있습니다.

_ (밑줄) 문자는 패턴 일치의 모든 단일 문자에 대해 와일드 카드로 사용할 수 있습니다.

Fname이 'j'로 시작하고 'n'으로 끝나고 Fname에 정확히 3자를 갖는 모든 직원을 찾으십시오.

SELECT * FROM Employees WHERE FName LIKE 'j_n'

_ (밑줄) 문자는 와일드 카드로 두 번 이상 사용하여 패턴을 일치시킬 수 있습니다.

예를 들어,이 패턴은 "jon", "jan", "jen"등과 일치합니다.

jn, john, jordan, justin, jason, julian, jillian, joann은이 쿼리에서 밑줄이 하나 사용되고 정확하게 건너 뛸 수 있기 때문에 표시되지 않습니다. 한 문자이므로 결과는 Fname의 3 자 여야합니다.

예를 들어,이 패턴은 "LaSt", "LoSt", "HaLt"등과 일치합니다.

SELECT * FROM Employees WHERE FName LIKE '_A_T'

범위 또는 세트로 매치

지정된 범위 (예 : [af] ) 또는 집합 (예 : [abcdef] ) 내의 단일 문자를 일치시킵니다.

이 범위 패턴은 "gary"와 일치하지만 "mary"는 일치하지 않습니다.

SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'

이 설정 패턴은 "mary"와 일치하지만 "gary"와는 일치하지 않습니다.

SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'

range 또는 set 앞에 ^ 캐럿을 추가하여 범위 나 집합을 무효화 할 수도 있습니다.

이 범위 패턴은 "gary"와 일치 하지 않지만 "mary"와 일치합니다.

SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'

이 설정 패턴은 "mary"와 일치 하지 않지만 "gary"와 일치합니다.

SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'

ANY 대 ALL과 일치

모두 일치 :
하나 이상의 문자열과 일치해야합니다. 이 예에서 제품 유형은 'electronics', 'books'또는 'video'여야합니다.

SELECT *
FROM   purchase_table
WHERE  product_type LIKE ANY ('electronics', 'books', 'video');

모두 일치 (모든 요구 사항을 충족해야 함)
이 예에서는 '연합 왕국' '런던' '동부 도로'(유사 콘텐츠 포함)가 일치해야합니다.

SELECT *
FROM   customer_table
WHERE  full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');

부정적인 선택 :
ALL을 사용하여 모든 항목을 제외하십시오.
이 예는 제품 유형이 '전자 제품'이 아닌 '서적'이 아닌 '비디오'가 아닌 모든 결과를 산출합니다.

SELECT *
FROM   customer_table
WHERE  product_type NOT LIKE ALL ('electronics', 'books', 'video');

다양한 문자 검색

다음 명령문은 Employees 테이블에서 A에서 F까지의 문자로 시작하는 FName을 갖는 모든 레코드를 찾습니다.

SELECT * FROM Employees WHERE FName LIKE '[A-F]%'

LIKE- 쿼리의 ESCAPE 문

LIKE -query로 텍스트 검색을 구현하면 일반적으로 다음과 같이 수행합니다.

SELECT * 
FROM T_Whatever 
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') 

그러나 (fulltext-search를 사용할 수있을 때 LIKE 꼭 사용해야 LIKE 것은 제외하고) 누군가가 "50 %"또는 "a_b"와 같은 텍스트를 입력하면 문제가 발생합니다.

따라서 전체 텍스트 검색으로 전환하는 대신 LIKE -escape 문을 사용하여 해당 문제를 해결할 수 있습니다.

SELECT * 
FROM T_Whatever 
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'

즉, \ 가 ESCAPE 문자로 처리됩니다. 즉, 검색 한 문자열의 모든 문자 앞에 \ 를 붙이면 % 또는 _ 와 같은 특수 문자를 입력하더라도 결과가 정확하기 시작합니다.

string stringToSearch = "abc_def 50%";
string newString = "";
foreach(char c in stringToSearch) 
     newString += @"\" + c;
 
sqlCmd.Parameters.Add("@in_SearchText", newString); 
// instead of sqlCmd.Parameters.Add("@in_SearchText", stringToSearch);

참고 : 위의 알고리즘은 데모 용입니다. 1 글자가 여러 글자로 구성된 경우에는 작동하지 않습니다 (utf-8). 예 : string stringToSearch = "Les Mise\u0301rables"; 각 문자가 아닌 각 문자에 대해이 작업을 수행해야합니다. 아시아 / 동아시아 / 남아시아 언어를 사용하는 경우 위의 알고리즘을 사용하면 안됩니다. 또는 올바른 코드를 시작하려면 각 graphemeCluster에 대해 코드를 작성해야합니다.

C # 인터뷰 질문 인 ReverseString 도 참조하십시오.

와일드 카드 문자

와일드 카드 문자는 SQL LIKE 연산자와 함께 사용됩니다. SQL 와일드 카드는 테이블 내의 데이터를 검색하는 데 사용됩니다.

SQL의 와일드 카드는 %, _, [charlist], [^ charlist]

% - 0 개 이상의 문자를 대체합니다.

   Eg:  //selects all customers with a City starting with "Lo"
        SELECT * FROM Customers
        WHERE City LIKE 'Lo%';

       //selects all customers with a City containing the pattern "es"
      SELECT * FROM Customers
       WHERE City LIKE '%es%';

_ - 한 문자 대신 사용할 수 있습니다.

Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';

[charlist] - 일치시킬 문자 및 문자 집합

Eg://selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[adl]%';

//selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';

[^ charlist] - 대괄호 안에 지정되지 않은 문자 만 일치시킵니다.

Eg://selects all customers with a City starting with a character that is not "a", "p", or "l"
SELECT * FROM Customers
WHERE City LIKE '[^apl]%';

or

SELECT * FROM Customers
WHERE City NOT LIKE '[apl]%' and city like '_%';


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow