我在SQL中有两个字符串,REPLACE函数只适用于其中一个字符串,为什么会这样?
示例1:
SELECT REPLACE('18 286.74', ' ', '')
示例2:
SELECT REPLACE('z z', ' ', '')
示例1的输出仍为“18 286.74”,而示例2的输出为“zz”。为什么SQL对这两个字符串的反应不同?
更新:
运行select replace('123 123.12', ' ', '')
时效果正常,但仍未使用'18 286.74'。
答案 0 :(得分:12)
按以下方式测试。
select unicode(substring('18 286.74', 3, 1))
如果代码返回32,那么它是一个空格,如果没有,则它是一个不同的Unicode字符,你的替换''将不起作用。
答案 1 :(得分:0)
可能需要施放。
UPD:或者不是(在sql 2005上运行正常)
答案 2 :(得分:0)
你确定它是一个空间吗?即您作为第二个参数传递的相同的空白字符?您发布的代码在SQL Server 2008上适合我。
重新研究你的朋友PC - 当你把它发给他时,也许这个空格已经正常化了吗?
答案 3 :(得分:0)
你可能正在使用不易碎的空间。
我可以通过在ALT+0160
SELECT REPLACE('18 286.74', ' ', '')
来重现它
请您发出以下信息:
SELECT CAST('18 286.74' AS BINARY), REPLACE('18 286.74', ' ', '')
将'18 286.74'
从REPLACE
复制到CAST
?
答案 4 :(得分:0)
我遇到了同样的问题,发现它是一个char(10)(换行)。当从Managment Studio复制时它变成了一个char(32),但在记录中它是一个char(10)尝试
Select Replace(@string, char(13), '')