如果我的结果为空或空,我希望它不要在字符串前添加逗号。我怎样才能做到这一点?
Update Companies
set address4 = concat(address4,','+ t.Eircode)
From companies c
Inner Join Temptbl1 t
on c.comp_id = t.Comp_ID
OR address4 = ''
Run Code Online (Sandbox Code Playgroud)
更新 :
只是为了在我进行此更新时说清楚
,V05 TTX1
Waterford,X01 B234
,B90 E902
Co Wexford,TD2 PVE2
Run Code Online (Sandbox Code Playgroud)
不管它是否为空,它都会添加一个逗号
我想找回的是:
V05 TTX1
Waterford,X01 B234
B90 E902
Co Wexford,TD2 PVE2
Run Code Online (Sandbox Code Playgroud)
如果没有值,则只需添加不带逗号的字符串,在我们的例子中V05 TTX1
不带,
在字符串的开头
CREATE TABLE [dbo].[companies](
[comp_id] [int] NOT NULL,
[address4] [varchar](32) NOT NULL
)
INSERT INTO [dbo].[companies]
([comp_id]
,[address4])
Run Code Online (Sandbox Code Playgroud)
由于您已经在组合CONCAT
和+
连接字符串,您可以将它们转过来(尽管我同意Lennert 的解决方案更清楚地显示了意图)。
Update Companies
-- set address4 = concat(address4,','+ t.Eircode)
set address4 = concat(address4 + ',', t.Eircode)
From companies c
Inner Join Temptbl1 t
on c.comp_id = t.Comp_ID
OR address4 = ''
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为CONCAT
转换NULL
为 type 的空字符串varchar(1)
,但只要CONCAT_NULL_YIELDS_NULL
将字符串与 NULL 连接起来就会产生 NULL。
有关示例,请参见此 dbfiddle
我认为 t.Eircode 是您所关心的。您可以使用 CASE 语句:
SET address4 = concat(address4
,CASE WHEN NULLIF(address4 ,'') IS NOT NULL
THEN ','+ t.Eircode
ELSE ''
END)
Run Code Online (Sandbox Code Playgroud)
我还添加了一个 NULLIF 函数,将 '' 映射到 null,以便 '' 和 null 被视为相同。
编辑:鉴于 address4 不是 NULL 的信息,测试可以更改为:
SET address4 = concat(address4
,CASE WHEN address4 <> ''
THEN ','
ELSE ''
END) + t.Eircode
Run Code Online (Sandbox Code Playgroud)
我的理解是 t.Eircode 应该始终连接,并且它是“,”应该有条件地连接,所以我将它从 CASE 中移出。
归档时间: |
|
查看次数: |
10925 次 |
最近记录: |