替换和转换在SQL Server中转换为NULL

时间:2017-05-12 14:07:24

标签: tsql replace sql-server-2012

我有一个场景,我必须从日期删除一些文本,然后将它们转换为DATETIME。但是当我使用下面的方法时,它会导致NULL输出。

SELECT CAST(REPLACE('2017-09-21','',NULL) AS DATETIME)

使用CONVERT时会出现相同的输出。为什么会这样?

2 个答案:

答案 0 :(得分:2)

它是documented

  

如果任何其中一个参数为NULL,则返回NULL。

您将NULL作为最后一个参数传递。

您可以使用NULLIF代替REPLACE

SELECT CAST(NULLIF('20170921', '') AS DATETIME)

如果字符串为空,则返回NULL,否则返回datetime

答案 1 :(得分:1)

指定了NULL。在SQL(所有产品)中,NULL表示 UNKNOWN 。将任何函数应用于未知值会导致未知结果,因此为NULL。例外是专门用于处理NULL的函数。

很难理解你的表达式是如何修复的,因为你试图用NULL替换空字符串。什么是空字符串应该匹配?