首页 > 解决方案 > 如何在特定列中现有数据的末尾插入特定文本?

问题描述

我正在使用 SQL Server 2014。假设我有一个名为T12 列的表,IdNumber并且Notes. 表T1包含大约 300,000 条记录。

Notes栏是自由文本栏,意味着用户在其中输入了自由文本。某些记录的此列为空(未输入文本)。

我现在有一个列表,列出了IdNumbers我需要在 的注释列中添加此特定文本“(TOC)”的位置T1,最好是在其中已经存在的任何文本的末尾。我创建了一个名为的表tempID,其中包含所有这些 IdNumber 的列表。

这是表格的T1外观(摘录):

IdNumber        Notes
--------------------------------------------------------------------
   101          Guest does not like beer
   154          wedding anniversary - to prepare a cake - 03052020
   160

IdNumber = 160有一个空白/空Notes列。

这是我想要实现的(假设需要将“(TOC)”添加到这3个IdNumbers中):

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

我该怎么做(我有一个大约 1500 个 IdNumber 的列表)?

这是我坚持使用 SQL 查询的地方:

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

我认为应该以不同的方式完成,因为我上面的查询将简单地Notes用“(TOC)”覆盖列的现有内容。

标签: sqlsql-servertsql

解决方案


实际上,concat()正是你想要的——忽略NULL值:

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

唯一需要注意的是,您似乎想在isltrim()时删除前导空格:notesNULL

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

这将删除NULL值的前导空格 -NULL以及notes.

您也可以使用COALESCE()and来执行此操作+

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

推荐阅读