sql - 如何在特定列中现有数据的末尾插入特定文本?
问题描述
我正在使用 SQL Server 2014。假设我有一个名为T1
2 列的表,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)”覆盖列的现有内容。
解决方案
实际上,concat()
正是你想要的——忽略NULL
值:
UPDATE dbo.T1
SET Notes = CONCAT(Notes, ' (TOC)')
WHERE IdNumber IN (SELECT t.IdNumber FROM dbo.tempID t);
唯一需要注意的是,您似乎想在isltrim()
时删除前导空格:notes
NULL
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);
推荐阅读
- azure-devops - 如何检查 azure 管道上的子模块?
- javascript - 当它具有某些属性值时,如何从另一个数组中的数组中删除一些整个对象?
- php - 如何在 PHP 中使用 tesseract_ocr?
- python - 将行与python中的值列表匹配
- reactjs - 如何将状态对象传递到 React Native 中的屏幕?
- r - 使用寓言分组预测的费率
- r - 使用 facet_wrap 时如何将 x 轴标签从顶部移动到底部?
- php - 使用数据提供者的 Laravel 验证测试
- javascript - 我如何在无状态函数 React-Native 中使用 refs,我正在使用 React-Native 0.62.2
- keras - 多输入模型中的 ValueError