在TSQL中连接空值列

10

我使用+连接几列的值。但是如果其中一列的值为 null+将无法工作。例如:

Select null+ 'Test'

查询返回null而不是'Test'。

您有什么建议来解决这个问题?

2个回答

21

在SQL Server 2012之前的版本中,您应该使用

   Select ISNULL(YourColumn,'') + 'Test' /*Or COALESCE(YourColumn,'')*/
为了避免这个问题。
有一个连接选项SET CONCAT_NULL_YIELDS_NULL OFF,但该选项已被弃用。
SQL Server 2012 引入了CONCAT 函数,该函数在连接时将NULL视为空字符串。
SELECT CONCAT(null,'Test')

还有别的解决方法吗?我正在将我的项目从Oracle迁移到MSSQL,我不想在每个控件上添加isnull控件。 - jhash
@jhash - 我所知道的唯一三种方法已经在我的答案中了。ISNULLCOALESCECONCAT_NULL_YIELDS_NULL。我建议在所有相关的地方都使用COALESCE,因为它是标准的,并且在Oracle和SQL Server中都可以使用。如果您想使用弃用的功能,那就由您决定,但它们将在未来版本中停止工作,并且此连接选项与某些SQL Server功能不兼容。我自己不会使用它。 - Martin Smith
@jhash - 尽管我现在怀疑它是否适用于Oracle。COALESCE肯定可以,但据我所知,Oracle将空字符串视为NULL,因此我不知道最终结果会是什么! - Martin Smith
不过这可能并不重要,因为Oracle无论如何都不使用+进行字符串连接。 - Martin Smith

0

使用IsNull

SELECT IsNull(MyColumn, '') + 'Test' ...

有没有其他解决方法?我正在将我的项目从Oracle迁移到MSSQL,我不想在每个控件上添加isnull控制。 - jhash
我认为马丁有一个解决方案,可以在不改变查询的情况下运行。 - Larry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接