我想创建一个计算列,它是其他几列的串联。在下面的示例中,当任何“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
)
提前致谢
答案 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)或第二个参数(如果它为',则为空)