수색…
통사론
와일드 카드 % : 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 '_%';