繁体   English   中英

奇怪的 SQL 查询行为

[英]Weird SQL query behavior

我正在使用 select 查询来解析地址,由于某种原因,like 和 charindex 都不起作用。 数据行如下:

Address
204‐101 xx CREEK DR
168‐906 xx RD
168‐906 xx RD

我试过像这样的查询

select top 10 ascii(substring(address,4,1)),
ascii('-'),
charindex(substring(address,4,1) collate SQL_Latin1_General_CP1_CI_AS,address),
charindex('-',address collate SQL_Latin1_General_CP1_CI_AS),
addr1=case when charindex('‐',address)>0 then substring(address,charindex('‐',address)+1,200) else address end

结果如下

45  45  4   0   204‐101 xx CREEK DR
45  45  4   0   168‐906 xx RD
45  45  4   0   168‐906 xx RD

所以地址中的破折号具有 45 的 ascii 代码。但由于某种原因,带有破折号的 charindex 返回 0,而带有 substring 的 charindex 来获得地址中的破折号有效。

我怀疑这是排序规则,但我确实已经将地址转换为服务器的排序规则。

任何想法? 谢谢!

他们是不同的角色。 数据中的一个是NCHAR(8208)而字符串文字中的一个是NCHAR(45) - 您应该使用UNICODE function 来查看这不是ASCII DB小提琴

调用ASCII将隐式地将字符串转换为varchar ,并且可以将字符静默更改为关闭等价物。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM