基于可空列的计算列

时间:2011-07-06 02:17:45

标签: sql sql-server calculated-columns

我想创建一个计算列,它是其他几列的串联。在下面的示例中,当任何“real”列为null时,结果集中的fulladdress为null。如何调整计算列函数以考虑可为空的列?

CREATE TABLE Locations
(
    [id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [fulladdress]  AS (((([address]+[address2])+[city])+[state])+[zip]),
    [address] [varchar](50) NULL,
    [address2] [varchar](50) NULL,
    [city] [varchar](50) NULL,
    [state] [varchar](50) NULL,
    [zip] [varchar](50) NULL
)

提前致谢

2 个答案:

答案 0 :(得分:4)

这很乱,但这是一个开始:

ISNULL(address,'')      + ' ' 
  + ISNULL(address2,'') + ' '
  + ISNULL(city,'')     + ' ' 
  + ISNULL(state,'')    + ' '
  + ISNULL(zip,'')

(如果isnull不起作用,您可以尝试coalesce。如果两者都不起作用,请分享您正在使用的DMBS。)

答案 1 :(得分:1)

除非您有充分的理由,否则您不应该在数据库中存储完整的地址列(与其他列的副本)。正确的方法是在查询中构造完整的地址字符串。通过动态创建字段,可以减少表中的冗余,并且只需要维护一列(需要在任何其他列更改时随时更新)。

在您的查询中,您可以执行类似

的操作
SELECT CONCAT(ISNULL(address,''), ISNULL(address2,''), ISNULL(city,''), ISNULL(state,''), ISNULL(zip,'')) AS fulladdress FROM Locations; 

CONCAT()函数执行连接,ISNULL()为您提供字符串(如果它不为null)或第二个参数(如果它为',则为空)