gpt4 book ai didi

sql - 计算列(COALESCE、CASE 和 ISNULL)

转载 作者:行者123 更新时间:2023-12-03 02:12:47 25 4
gpt4 key购买 nike

我不久前发布了类似的问题,现在由于我需要更新此代码,我回来问一个后续问题。上一个问题在这里:
Computed column based on nullable columns

我的数据(地址1、地址2、城市、州、邮政编码、国家/地区)可能包含不完整的信息。 IE。我无法保证除 StateCountry 列以外的任何内容都会有数据。

我想要一个 FullAddress 的计算列。

以前,我使用了COALESCE,如果所有字段都填写完毕,效果会很好。现在,随着数据要求的放宽,这不再是一个选项(因为我们以重复的逗号结尾) 完整地址)。这是我以前使用过的(注意,我只是在这里使用 SELECT 语句以方便使用 - 一旦我有了适用于所有情况的东西,就会将其转换为计算列“alter table add”语句):

SELECT (((((COALESCE([Address1],'')
+ COALESCE(', '+[Address2],''))
+ COALESCE(', '+[City],''))
+ COALESCE(', '+[State],''))
+ COALESCE(', '+[Zip],''))
+ COALESCE(', '+[Country],'')) AS FullAddress
FROM Locations

现在,我已经使用 CASE 组合了一个替代方案,但它仍然不适用于 Address1 为 NULL 的边缘情况(问题是 FullAddress 将以 ', ' 作为前两个字符)

SELECT CASE WHEN [Address1] IS NOT NULL THEN [Address1] ELSE '' END
+ CASE WHEN [Address2] IS NOT NULL THEN ', ' + [Address2] ELSE '' END
+ CASE WHEN [City] IS NOT NULL THEN ', ' + [City] ELSE '' END
+ CASE WHEN [State] IS NOT NULL THEN ', ' + [State] ELSE '' END
+ CASE WHEN [Zip] IS NOT NULL THEN ', ' + [Zip] ELSE '' END
+ CASE WHEN [Country] IS NOT NULL THEN ', ' + [Country] ELSE '' END
AS [FullAddress]
FROM Locations

我现在有点卡住了。有什么建议下一步要尝试什么吗?

最佳答案

您可以使用此模式:

SELECT
ISNULL(Address1 + ', ', '')
+ ISNULL(Address2 + ', ', '')
+ ISNULL(City + ', ', '')
-- ....
AS FullAddress

连接 NULL + ', ' 的结果是 NULL => Address1 + ', ' 将为 NULL 或有效地址 => ISNULL(Address1 + ', ', '') 将为空字符串或有效地址。

关于sql - 计算列(COALESCE、CASE 和 ISNULL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8775005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com