[英]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.