Tsql 查询SQL Server 2008表以在包含Unicode字符的列中查找值

Tsql 查询SQL Server 2008表以在包含Unicode字符的列中查找值,tsql,sql-server-2008,unicode,Tsql,Sql Server 2008,Unicode,我在从事的一个项目中遇到了一个问题:特定SQLServer2008表列中的某些字符串值包含Unicode字符。例如,某些字符串将包含EM破折号,而不是破折号 当我向第三方服务器发送HTTP请求时,包含Unicode字符的列值会导致问题。有没有一种方法可以查询哪些行包含一个或多个Unicode字符,这样我至少可以开始确定需要固定多少行?一种方法是查看哪些行在转换为不支持Unicode的数据类型时不再相等 CREATE TABLE myStrings ( string nvarchar(ma

我在从事的一个项目中遇到了一个问题:特定SQLServer2008表列中的某些字符串值包含Unicode字符。例如,某些字符串将包含EM破折号,而不是破折号


当我向第三方服务器发送HTTP请求时,包含Unicode字符的列值会导致问题。有没有一种方法可以查询哪些行包含一个或多个Unicode字符,这样我至少可以开始确定需要固定多少行?

一种方法是查看哪些行在转换为不支持Unicode的数据类型时不再相等

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

要查找包含ASCII字符32-126之外的一个或多个字符的所有字符串

我认为这应该可以胜任

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'%[^ -~]%'

不需要校对。

如果您的数据类型是unicode,那么所有字符都将是unicode。是否要在默认排序规则中查找所有不能在不丢失数据的情况下来回转换为单字节的值?我认为单字节项可能仍然包含我不关心的不可见控制字符。更准确的说法是,我希望找到包含ASCII字符32-126.Perfect之外的一个或多个字符的所有字符串——这正是我所需要的。非常感谢你!你的结果是什么样的?我试过类似的方法,但失败了。我想这和破折号和连字符有关
SELECT *
FROM your_table
WHERE your_column NOT LIKE N'%[^ -~]%'