sql—如何在特定列中现有数据的末尾插入特定文本?

ruyhziif  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(399)

我正在使用sql server 2014。假设我有一张table叫 T1 有两列, IdNumber 以及 Notes . 表 T1 包含大约300000条记录。
这个 Notes 列是一个自由文本列,表示用户在其中输入了自由文本。某些记录此列为空(未输入文本)。
我现在有一份 IdNumbers 在这里我需要添加这个特定的文本“(toc)”在注解栏的 T1 ,最理想的是在任何文本的结尾。我创建了一个名为 tempID 它包含所有这些ID号的列表。
这是我的table T1 外观(摘录):

IdNumber        Notes
--------------------------------------------------------------------
   101          Guest does not like beer
   154          wedding anniversary - to prepare a cake - 03052020
   160
``` `IdNumber = 160` 有空白/空 `Notes` 列。
以下是我想要实现的目标(假设“(toc)”需要添加到这3个idNumber中):

IdNumber Notes

101 Guest does not like beer (TOC)
154 wedding anniversary - to prepare a cake - 03052020 (TOC)
160 (TOC)

我怎么能做到这一点(我有一个大约1500个数字的列表)?
这就是我的sql查询所遇到的问题:

UPDATE T1
INSERT INTO [Notes]
VALUE ('(TOC)') ----stuck here!
WHERE [IdNumber] in (Select [IdNumber] from [tempID]

我认为应该采取不同的做法,因为我上面的查询只会覆盖 `Notes` 带“(toc)”的列。
i2byvkas

i2byvkas1#

你只需要简单地加上 (TOC) 请注意 NotesNULL ,您需要进行一些额外的处理:

UPDATE dbo.T1
SET Notes = ISNUL(Notes, '') + ' (TOC)'
WHERE IdNumber IN (SELECT IdNumber FROM dbo.tempID);

ISNULL() 接线员,你转弯 NULL 转换为空字符串,然后可以与 (TOC) 字符串。如果忽略这个,那么它就不起作用了,因为串联 NULL 任何其他的都会导致 NULL

csbfibhn

csbfibhn2#

事实上, concat() 做你想做的事——忽略 NULL 价值观:

UPDATE dbo.T1
    SET Notes = CONCAT(Notes, ' (TOC)')
    WHERE IdNumber IN (SELECT t.IdNumber FROM dbo.tempID t);

唯一的警告是你似乎想要 ltrim() 删除前导空格时 notesNULL :

UPDATE dbo.T1
    SET Notes = LTRIM(CONCAT(Notes, ' (TOC)'))
    WHERE IdNumber IN (SELECT t.IdNumber FROM dbo.tempID t);

这将删除 NULL 价值观——以及任何 NULL s在 notes .
你可以这样做 COALESCE() 以及 + 也:

UPDATE dbo.T1
    SET Notes = COALESCE(Notes + ' ', '') + '(TOC)'
    WHERE IdNumber IN (SELECT t.IdNumber FROM dbo.tempID t);
56lgkhnf

56lgkhnf3#

试试这个:

UPDATE T1
SET T1.Notes = ISNULL(T1.Notes + ' ', '') + '(TOC)'
from T1 inner join dbo.tempID T2 on T1.IdNumber=T2.IdNumber

相关问题