与空的SQL Serverstring串联

我正在创build一个有可能为空的字段的计算列。

问题是,如果任何这些字段为空,整个计算列将为空。 我从Microsoft文档了解到,这是预期的,可以通过SET CONCAT_NULL_YIELDS_NULL设置closures。 不过,我不想改变这个默认行为,因为我不知道它对SQL Server其他部分的影响。

有没有办法让我只是检查列是否为空,只有在计算列公式中追加其内容,如果它不为空?

你可以使用ISNULL(....)

 SET @Concatenated = ISNULL(@Column1, '') + ISNULL(@Column2, '') 

如果column / expression的值确实为NULL,则将使用指定的第二个值(此处为空string)。

从SQL Server 2012开始,使用CONCATfunction更容易。

它将NULL视为空string

 DECLARE @Column1 VARCHAR(50) = 'Foo', @Column2 VARCHAR(50) = NULL, @Column3 VARCHAR(50) = 'Bar'; SELECT CONCAT(@Column1,@Column2,@Column3); /*Returns FooBar*/ 

使用COALESCE 。 使用COALESCE(your_column, '')而不是your_column 。 这将返回空string而不是NULL。

使用

 SET CONCAT_NULL_YIELDS_NULL OFF 

并且空值连接到一个string将不会导致null。

请注意,这是一个弃用的选项,请避免使用。 请参阅文档了解更多详情。

你也可以使用CASE – 下面我的代码检查空值和空string,只有在有值时才添加分隔符:

 SELECT OrganisationName, 'Address' = CASE WHEN Addr1 IS NULL OR Addr1 = '' THEN '' ELSE Addr1 END + CASE WHEN Addr2 IS NULL OR Addr2 = '' THEN '' ELSE ', ' + Addr2 END + CASE WHEN Addr3 IS NULL OR Addr3 = '' THEN '' ELSE ', ' + Addr3 END + CASE WHEN County IS NULL OR County = '' THEN '' ELSE ', ' + County END FROM Organisations 

ISNULL(ColumnName, '')

我只是想贡献一下,如果有人正在寻找在string之间添加分隔符的帮助,这取决于字段是否为NULL

所以在从不同的领域创build一个行地址的例子

地址1地址 2地址 3城市邮政编码

在我的情况下,我有以下计算列似乎正在工作,因为我想要它:

 case when [Address1] IS NOT NULL then ((( [Address1] + isnull(', '+[Address2],'')) + isnull(', '+[Address3],'')) + isnull(', '+[City] ,'')) + isnull(', '+[PostCode],'') end 

希望帮助别人!

在Sql Server中:

 insert into Table_Name(PersonName,PersonEmail) values(NULL,'xyz@xyz.com') PersonName is varchar(50), NULL is not a string, because we are not passing with in single codes, so it treat as NULL. 

代码背后:

 string name = (txtName.Text=="")? NULL : "'"+ txtName.Text +"'"; string email = txtEmail.Text; insert into Table_Name(PersonName,PersonEmail) values(name,'"+email+"') 

我也有很多麻烦。 使用上面的案例,无法得到它的工作,但这对我来说是这样的工作:

 Replace(rtrim(ltrim(ISNULL(Flat_no, '') + ' ' + ISNULL(House_no, '') + ' ' + ISNULL(Street, '') + ' ' + ISNULL(Town, '') + ' ' + ISNULL(City, ''))),' ',' ') 

replace纠正由连接单个空格造成的双重空格之间没有任何东西。 r / ltrim在两端摆脱任何空格。