Sql 计算列(合并vs案例vs ISNULL)
不久前我发布了一个类似的问题,现在我需要更新代码,我回来问一个后续问题。前面的问题在这里:Sql 计算列(合并vs案例vs ISNULL),sql,sql-server,case,coalesce,calculated-columns,Sql,Sql Server,Case,Coalesce,Calculated Columns,不久前我发布了一个类似的问题,现在我需要更新代码,我回来问一个后续问题。前面的问题在这里: 我的数据(Address1、Address2、城市、州、邮政编码、国家)可能包含不完整的信息。也就是说,我不能保证除了州和国家列之外的任何列都会有数据 我想要一个FullAddress的计算列 在前面,我使用了COALESCE,如果所有字段都被填充,它的效果非常好。现在,随着数据要求的放宽,这不再是一个选项(因为我们在FullAddress中以重复的逗号结尾)。以下是我以前使用过的内容(注意,为了便于使
我的数据(
Address1、Address2、城市、州、邮政编码、国家
)可能包含不完整的信息。也就是说,我不能保证除了州
和国家
列之外的任何列都会有数据
我想要一个FullAddress
的计算列
在前面,我使用了COALESCE
,如果所有字段都被填充,它的效果非常好。现在,随着数据要求的放宽,这不再是一个选项(因为我们在FullAddress
中以重复的逗号结尾)。以下是我以前使用过的内容(注意,为了便于使用,我在这里只使用SELECT语句——一旦我有了适用于所有情况的内容,就会转换为计算列“ALTERTABLEADD”语句):
现在,我已经用大小写
组合了一个备选方案,但它仍然不适用于地址1为空的边缘大小写(问题是完整地址
的前两个字符是')
我在这一点上有点卡住了。有什么建议吗?您可以使用以下模式:
SELECT
ISNULL(Address1 + ', ', '')
+ ISNULL(Address2 + ', ', '')
+ ISNULL(City + ', ', '')
-- ....
AS FullAddress
“concationNULL+”,“
的结果是NULL
=>Address1+”,“
将为NULL或有效地址=>ISNULL(Address1+”,“,”)
将为空字符串或有效地址
SELECT STUFF(
COALESCE(', ' + Address1, '') + COALESCE(', ' + Address2, '') + ...
1,
2,
''
) AS FullAddress
FROM Locations
连接的字符串要么为空,要么以,
开头(逗号和空格)STUFF()
将删除前两个字符并返回字符串的其余部分。我的问题是:如何构造语句,以便在缺少数据(例如缺少Address1)的情况下,FullAddress computed列不以“,”Yup,现在我看它是有意义的-在SQL中向任何东西添加NULL,它都保持NULL。我不知道您的数据需求有多“轻松”。例如,如果您只有列城市
上的数据,您的输出将在末尾有一个额外的,
。也许你应该考虑使用一个用户定义的函数。
SELECT
ISNULL(Address1 + ', ', '')
+ ISNULL(Address2 + ', ', '')
+ ISNULL(City + ', ', '')
-- ....
AS FullAddress
SELECT STUFF(
COALESCE(', ' + Address1, '') + COALESCE(', ' + Address2, '') + ...
1,
2,
''
) AS FullAddress
FROM Locations