2015-04-23 22 views
0

ASCII UNICODE字符我有以下表格:檢測未在表

Select 
    name, 
    address, 
    description 
from dbo.users 

我想搜索所有該表是UNICODE而不是ASCII的任何字符。這可能嗎?

+1

您是否正在尋找返回字符本身還是隻識別具有這些字符的記錄? @johnnybell已經回答了後者的情況。 –

+0

@ shree.pat18只是記錄會做...某種指針,所以我可以找到「罪惡派對」 – whytheq

回答

2

你可以很簡單地找到非ASCII字符:

SELECT NAME, ADDRESS, DESCRIPTION 
FROM DBO.USERS 
WHERE NAME != CAST(NAME AS VARCHAR(4000)) 
OR ADDRESS != CAST(ADDRESS AS VARCHAR(4000)) 
OR DESCRIPTION != CAST(DESCRIPTION AS VARCHAR(4000)) 
+0

以及它運行。只需要創建一些文本,其中包含純unicode,讓我放心,它突出顯示問題 – whytheq

+1

感謝Johnny:'SELECT('​​vsdǣf'= CAST('vsdǣf'AS VARCHAR(4000))'...作品 – whytheq

+0

這不會檢查ASCII;它將檢查數據庫的默認編碼,這可能不是ASCII。要查看它是什麼,請參閱此[答案](http://stackoverflow.com/a/7321208/2226988)。 –

1

據我所知,似乎沒有內置功能。蠻力方法是將每個字符傳遞給ascii,然後將結果傳遞給char並檢查它是否返回'?',這意味着該字符超出範圍。你可以寫與下面的代碼作爲參考UDF,但我認爲這是一個非常低效的解決方案:

declare @i int = 1 
    declare @x nvarchar(10) = N'vsdǣf' 
    declare @result nvarchar(100) = N'' 

    while (@i < len(@x)) 
    begin 
    if char(ascii(substring(@x,@i,1))) = '?' 
     begin 
     set @result = @result + substring(@x,@i,1)  
     end 
    set @i = @i+1 
    end  

    select @result