如果值为 null 或为空,则不要在字符串前添加逗号

Luc*_*ucy 2 sql-server t-sql

如果我的结果为空或空,我希望它不要在字符串前添加逗号。我怎样才能做到这一点?

  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)

Tom*_*m V 9

由于您已经在组合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


Len*_*art 6

我认为 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 中移出。