오늘 페이지를 작성할 때 저도 매우 우울했습니다. 테이블에 레코드가 있었는데 ASP에서 찾을 수 없었습니다. 이는 access 및 SQL의 쿼리문에 있는 와일드카드 문자가 다르기 때문인 것으로 나타났습니다. .
ACCESS의 와일드카드 문자와 SQL SERVER의 와일드카드 문자 비교
================================================= =
ACCESS 라이브러리의 와일드카드 문자는 다음과 같습니다.
*모든 문자 수와 일치
?는 모든 단일 문자와 일치합니다.
SQL Server의 와일드카드 문자는 다음과 같습니다.
%는 임의 개수의 문자와 일치합니다.
_는 단일 문자와 일치합니다.
텍스트
오늘 페이지를 작성할 때 저도 매우 우울했습니다. 테이블에 기록이 있었지만 ASP에서는 찾을 수 없었습니다. 이론적인 SQL 문은 다음과 같습니다.
* FROM t_food를 선택하세요. 여기서 t_food.name은 '*apple*'과 같습니다.
GOOGLE에서 검색해 보니 ASP의 퍼지 쿼리는 다음과 같이 작성되어야 하는 것으로 나타났습니다.
* FROM t_food를 선택하세요. 여기서 t_food.name은 '%%apple%%'와 같습니다.
%여야 하며, 2개가 있어야 합니다. 주의하시기 바랍니다.
++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SQL 쿼리문 와일드카드 문제
SQL 문을 사용하여 Access에서 데이터를 쿼리할 때 와일드카드 문자 *가 쿼리에 사용됩니다. 성명은 다음과 같습니다 :
책 이름이 '*h*'와 같은 일반 위치에서 *를 선택하세요.
아무 문제 없이 Access의 SQL 보기에서 시도해 보니 모든 것이 잘 작동합니다. 그래서 C# 프로그램에 SQL 문을 작성했는데, 쿼리 문에 도달하자마자 오류가 발생해서 당황했습니다. 그래서 Access 도움말 파일을 찾아보니 다음과 같은 도움말이 있었습니다.
///////////////////////////////////////////////// /// //////////
문자열 표현식을 SQL 표현식의 패턴과 비교합니다.
문법
패턴 같은 표현
Like 연산자 구문은 다음 부분으로 구성됩니다.
부분 설명
표현식 Where 절에 사용되는 SQL 표현식입니다.
문자열 리터럴 패턴은 표현식과 비교됩니다.
설명하다
Like 연산자를 사용하여 지정된 패턴과 일치하는 필드 값을 찾을 수 있습니다. 패턴의 경우 전체 값(예: Like Smith)을 지정하거나 와일드카드를 사용하여 값 범위(예: Like Sm*)를 찾을 수 있습니다.
표현식에서 Like 연산자를 사용하여 필드 값을 문자열과 비교할 수 있습니다. 예를 들어 SQL 쿼리에 Like C*를 입력하면 쿼리는 문자 C로 시작하는 모든 필드 값을 반환합니다. 매개 변수 쿼리에서는 사용자에게 검색할 패턴을 입력하라는 메시지를 표시할 수 있습니다.
다음 예에서는 문자 P로 시작하고 그 뒤에 A부터 F까지의 문자와 세 개의 숫자가 오는 데이터를 반환합니다.
P[AF]###처럼
다음 표는 Like를 통해 다양한 표현 패턴을 테스트하는 방법을 보여줍니다.
일치 유형
패턴 매칭
(True 반환) 일치하지 않음
(거짓 반환)
여러 문자 a*a aa, aBa, aBBBa aBC
*ab* abc, AABB, Xab aZb, bac
특수문자a
아*아 아아아
여러 문자 ab* abcdefg, abc cab, aab
단일 문자 a?a aaa, a3a, aBa aBBBa
단일 숫자 a#a a0a, a1a, a2a aaa, a10a
문자 범위 [az] f, p, j 2, &
범위를 벗어났습니다. [!az] 9, &, % b, a
숫자가 아닌 값 [!0-9] A, a, &, ~ 0, 1, 9
복합 값 a[!bm]# An9, az0, a99 abc, aj0
참조 주소: http://office.microsoft.com/zh-cn/assistance/HP010322532052.aspx
///////////////////////////////////////////////// /// /////////
도움말에는 이렇게 나와 있는데 문제가 무엇인가요? 그것은 나를 더욱 혼란스럽게 한다. 나중에 동료에게 물어보니 SQL 문이 잘못되었습니다. 와일드카드 문자는 * 대신 %여야 합니다. 하지만 도움말에 *가 표시되고 Access에서 테스트하면 모든 것이 잘 작동합니다. 동료들은 이유를 설명할 수 없어서 계속해서 도움말 요청에 대한 답변을 찾습니다. 다음 정보는 다른 도움말 파일에서 발견되었습니다.
///////////////////////////////////////////////// /// /////////
내장된 패턴 일치 방법은 문자열 비교를 위한 일반적인 도구를 제공합니다. 다음 표에서는 Like 연산자와 함께 사용할 수 있는 와일드카드 문자와 일치하는 숫자 및 문자열을 보여줍니다.
패턴의 문자 표현식의 일치
? 또는 _(밑줄) 임의의 단일 문자
* 또는 % 0개 이상의 문자
# 임의의 단일 숫자(0-9)
[charlist] charlist의 단일 문자입니다.
charlist에 없는 단일 문자입니다.
대괄호([])로 묶인 하나 이상의 문자 집합(charlist)을 사용하여 표현식의 단일 문자와 일치시킬 수 있으며 charlist에는 숫자를 포함하여 ANSI 문자 집합의 대부분의 문자가 포함될 수 있습니다. 왼쪽 대괄호([), 물음표(?), 숫자 기호(#) 및 별표(*)와 같은 특정 문자는 대괄호로 묶어 기호 자체와 직접 일치시킬 수 있습니다. 닫는 대괄호는 그룹 내에서 자체적으로 일치하는 데 사용할 수 없지만 그룹 외부에서는 단일 문자로 사용할 수 있습니다.
대괄호로 묶인 간단한 문자 목록 외에도 문자 목록에는 하이픈(-)을 사용하여 구분된 상한 및 하한 범위 경계가 있을 수 있습니다. 예를 들어 패턴에 [AZ]를 사용할 때 표현식의 해당 문자에 A~Z 범위의 대문자가 포함되어 있으면 일치가 이루어집니다. 범위를 구분하지 않고 여러 범위를 대괄호로 묶을 수 있습니다. 예를 들어, [a-zA-Z0-9]는 모든 영숫자 문자와 일치합니다.
ANSI SQL 와일드카드 문자(%) 및 (_)는 Microsoft® Jet 4.X 버전 및 Jet용 Microsoft OLE DB Provider에서만 유효합니다. Microsoft Access 또는 DAO에서 사용되는 경우 텍스트로 처리됩니다.
패턴 일치에 대한 다른 중요한 규칙은 다음과 같습니다.
문자 목록 시작 부분에 느낌표(!)를 사용하면 문자 목록 외부의 문자가 표현식에 나타날 경우 일치가 발생함을 나타냅니다. 대괄호 밖에서 사용하면 느낌표가 자체적으로 일치합니다.
하이픈(-)은 문자 목록의 시작 부분(느낌표 뒤)이나 끝 부분에 사용하여 자체적으로 일치시킬 수 있습니다. 다른 위치에서 하이픈은 ANSI 문자 범위를 식별합니다.
문자 범위가 지정되면 문자는 오름차순(AZ 또는 0-100)으로 표시되어야 합니다. [AZ]는 유효한 모드이고, [ZA]는 유효하지 않은 모드입니다.
문자 순서 [ ]는 무시되며 길이가 0인 문자( )로 처리됩니다.
참조 주소: http://office.microsoft.com/zh-cn/assistance/HP010322842052.aspx
///////////////////////////////////////////////// /// //////////////
이쯤에서 드디어 이유를 찾았습니다. Access에서 와일드카드 *를 사용하기 때문에 모든 것이 잘 되는데 %로 변경하면 성공하지 못합니다. C#에서는 % 와일드카드만 지원되며, 이를 *로 바꾸면 오류가 발생합니다! 이 문제는 호환성 문제로 간주됩니까?
와일드카드:
와일드카드 설명 예
% 0개 이상의 문자를 포함하는 문자열입니다. WHERE title LIKE '%computer%'는 제목에 컴퓨터라는 단어가 포함된 모든 책 제목을 찾습니다.
_(밑줄) 임의의 단일 문자입니다. WHERE au_fname LIKE '_ean'은 ean으로 끝나는 4글자 이름(Dean, Sean 등)을 모두 찾습니다.
[ ] 범위([af]) 또는 집합([abcdef])의 단일 문자를 지정합니다. 여기서 au_lname LIKE '[CP]arsen'은 arsen으로 끝나고 C와 P 사이의 단일 문자로 시작하는 저자 성을 찾습니다(예: Carsen, Larsen, Karsen 등).
[^] 지정된 범위([af]) 또는 집합([abcdef])에 속하지 않는 단일 문자입니다. 여기서 au_lname LIKE 'de[^l]%'는 de로 시작하고 뒤에 l이 오지 않는 모든 저자 성을 찾습니다.
와일드카드를 리터럴로 사용
와일드카드 문자를 괄호로 묶어 문자열과 일치하는 와일드카드 패턴을 리터럴 문자열로 사용할 수 있습니다. 다음 표는 LIKE 키워드와 [ ] 와일드카드 문자를 사용하는 예를 보여줍니다.
기호 의미
'5[%]'처럼 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, d 또는 f
LIKE '[-acdf]' -, a, c, d 또는 f
좋다 '[ [ ]' [
좋다 ']' ]
LIKE 'abc[_]d%' abc_d 및 abc_de
LIKE 'abc[def]' abcd, abce 및 abcf
ESCAPE 절을 사용한 패턴 일치
하나 이상의 특수 와일드카드 문자가 포함된 문자열을 검색합니다. 예를 들어, 고객 데이터베이스의 할인 테이블은 백분율 기호(%)와 함께 할인 값을 저장할 수 있습니다. 와일드카드 문자가 아닌 문자로 백분율 기호를 검색하려면 ESCAPE 키워드와 이스케이프 문자를 제공해야 합니다. 예를 들어, 샘플 데이터베이스에는 30% 텍스트를 포함하는 comment라는 열이 포함되어 있습니다. 주석 열의 어느 위치에서든 문자열의 30%를 포함하는 행을 검색하려면 WHERE 주석 LIKE '%30!%%' ESCAPE '!'로 구성된 Where 절을 지정합니다. ESCAPE 및 이스케이프 문자를 지정하지 않으면 SQL Server는 문자열 30을 포함하는 모든 행을 반환합니다.
다음 예에서는 pubs 데이터베이스에 있는 titles 테이블의 Notes 열에서 100개 이상의 사본을 구매한 경우 문자열 50% 할인을 검색하는 방법을 보여줍니다.
제목에서 메모 선택 '100개 이상 구매 시 50%% 할인' ESCAPE '%'와 같은 메모가 있음