与空的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开始,使用CONCAT
function更容易。
它将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在两端摆脱任何空格。