如何在SQL

时间:2015-05-14 14:45:49

标签: sql sql-server unicode

我甚至不知道一周前就存在Unicode替换字符( )。现在我知道至少在SQL中似乎存在一些非常特殊和奇怪的逻辑。例如:

select replace(N'bl' + NCHAR(65533) + N'rt', NCHAR(65533), N'X')

返回bl rt而不是blXrt。和

select CHARINDEX(NCHAR(65533), N'b' + NCHAR(65533) + N't')

返回0而不是2.我只是想确定表中的哪些字符串包含这个字符,而我找不到一种直接的方法来执行它。对这个角色的处理是如此奇怪,必须有更多我可以了解它。定义的行为在哪里,更具体地说,在MS SQL Server数据库中查找包含此字符的字符串的最简单方法是什么?

修改 对于试验答案的任何人,我建议您根据以下数据测试您的答案:

create table Test([Value] nvarchar(100) not null)
insert into Test([Value]) values('b' + NCHAR(65533) + 't')
insert into Test([Value]) values('b?t')
insert into Test([Value]) values('bat')

1 个答案:

答案 0 :(得分:7)

Krzysztof Kozielczyk写道,有效的unicode字符需要被转换为二进制字符串才能被替换,因此这可能是您最初问题的答案。

SELECT REPLACE(N'test' + NCHAR(65533) 
COLLATE Latin1_General_BIN, NCHAR(65533) COLLATE Latin1_General_BIN, '')

上面的代码还指出了如何使用有效的unicode字符定位字符串,但这是一种解决方法而不是解决方案。 source