我最近遇到了这种行为,虽然我可以解决它,但我很好奇它为什么会发生。似乎没有太多文件解释为什么会发生这种情况。
请考虑以下两个片段:
SELECT REPLACE('hello world', 'world', NULL)
SELECT REPLACE('hello world', 'foobar', NULL)
这两个示例都返回NULL。
我也不太明白,但是第一个我可以看到如果确实有一些警告,我不知道有NULL,这将导致我们看到的结果。
但是第二个例子我完全被难倒了。即使有一些奇怪的NULL替换行为,为什么我的字符串被操纵呢?在目标字符串中找不到替换字符串。
读这个:
https://docs.microsoft.com/en-us/sql/t-sql/functions/replace-transact-sql
它指出:
如果任何一个参数为NULL,则返回NULL。
这肯定是SQL Server中混乱的NULL handlich的结果。使用NULL执行的所有操作都将导致NULL。尝试SELECT 1 + NULL或'abc'+ NULL。无论如何,因为你正在使用一个字符串,你应该使用空字符串''而不是NULL。