2011-03-03 4 views
3

작업중인 프로젝트에서 문제가 발생했습니다. 특정 SQL Server 2008 테이블 열의 일부 문자열 값에 유니 코드 문자가 포함되어 있습니다 . 예를 들어 대시 대신 일부 문자열에 EM DASH (http://www.fileformat.info/info/unicode/char/2014/index.htm)가 대신 포함됩니다.유니 코드 문자가 포함 된 열의 값을 찾기 위해 SQL Server 2008 테이블 쿼리

HTTP 요청을 타사 서버로 보낼 때 유니 코드 문자가 포함 된 열 값이 문제를 일으키고 있습니다. 어떤 행에 하나 이상의 유니 코드 문자가 포함되어 있는지 쿼리 할 수있는 방법이 있습니까? 적어도 수정해야하는 행 수를 식별 할 수 있습니까?

+1

데이터 유형이 유니 코드이면 모든 문자가 유니 코드입니다. 데이터 손실없이 기본 데이터 정렬에서 라운드 할 수없는 모든 값을 단일 바이트로 트 랩핑하려고합니까? –

+0

1 바이트 항목에는 여전히 관심이없는 보이지 않는 제어 문자가 포함될 수 있다고 생각합니다. ASCII 문자 32-126 이외의 하나 이상의 문자를 포함하는 모든 문자열을 찾고 싶다고 말하는 것이 더 정확할 것입니다. –

답변

17

ASCII 문자 32-126 이외의 하나 이상의 문자가 포함 된 모든 문자열을 찾고 싶습니다.

나는이 일을해야한다고 생각한다.

SELECT * 
FROM your_table 
WHERE your_column LIKE N'%[^ -~]%' collate Latin1_General_BIN 
+0

Perfect - 그게 내가 필요한 것입니다. 정말 고맙습니다! –

+0

니스 솔루션 +1 – MSTdev

2

당신이 할 수있는 한 가지 방법은 유니 코드를 지원하지 않는 데이터 유형으로 변환 할 때 어떤 행이 더 이상 동일하지 않은지 확인하는 것입니다.

CREATE TABLE myStrings (
    string nvarchar(max) not null 
) 

INSERT INTO myStrings (string) 
SELECT 'This is not unicode' union all 
SELECT 'This has '+nchar(500)+' unicode' union all 
SELECT 'This also does not have unicode' union all 
SELECT 'This has lots of unicode '+nchar(600)+nchar(700)+nchar(800)+'!' 

SELECT cast(string as varchar) 
FROM myStrings 

SELECT * 
FROM myStrings 
WHERE cast(cast(string as varchar(max)) as nvarchar(max)) <> string 
+0

결과는 어떻게 생겼습니까? 비슷한 것을 시도했지만 실패했습니다. DASH와 HYPHEN과 관련이 있다고 생각합니다. – Richard

-1
SELECT * 
FROM your_table 
WHERE your_column LIKE N'%[^ -~]%' collate Latin1_General_BIN 

는 ASCII 문자 32-126 내에서 하나 개 이상의 문자를 포함하는 모든 문자열을 찾습니다.

ASCII 문자가 32-126 범위에없는 문자열을 찾는 것이 목적이라고 생각 했습니까?

LIKE에서는 불가능합니다. 이게 효과가 없을까요?

SELECT * 
FROM your_table 
WHERE your_column NOT LIKE N'%[^ -~]%' 

한 부씩 인쇄가 필요하지 않습니다.

관련 문제