열에 URL을 저장하고 싶습니다. RFC 3986에 따르면 US-ASCII는 URL을 구성하는 문자 집합입니다.T-SQL에서 US-ASCII 문자를 일치시키는 방법은 무엇입니까?
SQL Server에는 US-ASCII 문자 집합의 모든 문자를 인코딩 할 수있는 VARCHAR 형식과 코드 페이지에 종속적 인 128 개가 있습니다.
CHECK 제약 조건을 사용하여 열의 값에 US-ASCII 문자 집합의 인쇄 가능한 문자 만 포함되도록하고 싶습니다. 즉, 문자열의 모든 문자에 대해 ASCII(@char) >= 32 AND ASCII(@char) < 127
입니다.
체크 제약 조건에서이를 수행하는 LIKE 식을 사용할 수 있다고 생각하지만 올바른 패턴을 찾을 수 없습니다. 저는 Itzik Ben-Gan이 허용 한 범위를 벗어나는 캐릭터를 맞추려고 시도하고 있습니다. 그는 그의 기사 Can I convert this string to an integer?에 선물했습니다. 내 테스트 하니스
은 내가 열 테이블 패턴 @Patterns
LIKE 연산자와 함께 사용하기에 삽입 후보 테이블 @TestData
를 생성하고 I는 각각의 후보에 대해 각각 패턴 매칭의 결과를 선택
@Patterns
에 삽입되는 첫 번째 행은 Itzik이 비 숫자 문자를 일치시키는 데 사용하는 패턴과 같습니다. 두 번째 행은 인쇄 가능한 US-ASCII 문자 범위를 벗어나는 문자에이 방법을 적용하려는 시도입니다. 후보는 숫자를 포함하고 있기 때문에
ID String Pattern Match
--- -------------------------------------------------------- ------------ ------
1 €ÿ %[^0-9]% 0
2 ab3 %[^0-9]% 0
3 http://www.google.com/ %[^0-9]% 0
4 http://www.example.com/düsseldorf?neighbourhood=Lörick %[^0-9]% 0
5 1234 %[^0-9]% 1
6 €ÿ %[^ -~]% 0
7 ab3 %[^ -~]% 0
8 http://www.google.com/ %[^ -~]% 0
9 http://www.example.com/düsseldorf?neighbourhood=Lörick %[^ -~]% 0
10 1234 %[^ -~]% 0
가, 5 행이 일치 :
나는 위의 배치를 실행
, 나는 다음과 같은 결과 세트를받을 수 있습니다. 1 행부터 4 행까지의 후보는 숫자 만 포함하지 않으므로 패턴과 일치하지 않습니다.예상대로 6 행의 후보는 '높은 ASCII'문자가 포함되어 있기 때문에 패턴과 일치하지 않습니다.
행 7, 8 및 10의 후보는 인쇄 가능한 US-ASCII 문자 만 포함되어 있기 때문에 일치시킬 것으로 예상됩니다. 그러나 이것들은 일치하지 않습니다.
LIKE 표현의 패턴에 어떤 문제가 있습니까?
이진 부수 항을 사용해야합니다. 패턴 구문의 범위는 데이터 정렬 순서에 따라 결정됩니다. –
[SQL Server 2008 테이블을 쿼리하여 유니 코드 문자가 포함 된 열의 값을 찾을 수 없음] (http://stackoverflow.com/questions/5184429/querying-a-sql-server-2008-table-to-find- 값을 포함한 열 단위 유니 코드 -c) –
중복이 아닙니다. 상황은 다르다. 그러나 해결책은 같습니다! –