Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算列(合并vs案例vs ISNULL)_Sql_Sql Server_Case_Coalesce_Calculated Columns - Fatal编程技术网

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
“concation
NULL+”,“
的结果是
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