Ale*_*lex 81 sql-server null string-concatenation calculated-columns
我正在创建一个跨越字段的计算列,其中一些可能为null.
问题是如果这些字段中的任何一个为null,则整个计算列将为null.我从Microsoft文档中了解到这是预期的,可以通过SET CONCAT_NULL_YIELDS_NULL设置关闭.但是,我不想更改此默认行为,因为我不知道它对SQL Server其他部分的影响.
有没有办法让我只检查一列是否为空,如果它不为空,只在计算列公式中附加其内容?
mar*_*c_s 135
您可以使用 ISNULL(....)
SET @Concatenated = ISNULL(@Column1, '') + ISNULL(@Column2, '')
Run Code Online (Sandbox Code Playgroud)
如果列/表达式的值确实为NULL,则将使用指定的第二个值(此处为:空字符串).
Mar*_*ith 51
从SQL Server 2012开始,使用该CONCAT功能可以轻松实现.
它被视为NULL空字符串
DECLARE @Column1 VARCHAR(50) = 'Foo',
@Column2 VARCHAR(50) = NULL,
@Column3 VARCHAR(50) = 'Bar';
SELECT CONCAT(@Column1,@Column2,@Column3); /*Returns FooBar*/
Run Code Online (Sandbox Code Playgroud)
小智 11
你也可以使用CASE - 我的代码检查空值和空字符串,并且只有在有值时才添加一个分隔符:
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
Run Code Online (Sandbox Code Playgroud)
Sim*_*ran 10
使用
SET CONCAT_NULL_YIELDS_NULL OFF
Run Code Online (Sandbox Code Playgroud)
并且将null值连接到字符串不会导致null.
请注意,这是一个弃用的选项,请避免使用.有关详细信息,请参阅文档.
我只想在有人寻求帮助时在字符串之间添加分隔符,这取决于字段是否为NULL.
因此,在从单独的字段创建单行地址的示例中
地址1,地址2,地址3,城市,邮编
在我的情况下,我有以下计算列似乎按我的意愿工作:
case
when [Address1] IS NOT NULL
then ((( [Address1] +
isnull(', '+[Address2],'')) +
isnull(', '+[Address3],'')) +
isnull(', '+[City] ,'')) +
isnull(', '+[PostCode],'')
end
Run Code Online (Sandbox Code Playgroud)
希望有人帮助!
| 归档时间: |
|
| 查看次数: |
132402 次 |
| 最近记录: |