SQL Server:如何在表数据中用单引号查找和替换多引号
Posted
技术标签:
【中文标题】SQL Server:如何在表数据中用单引号查找和替换多引号【英文标题】:SQL Server: How to find and replace multiple quote with single quote in table data 【发布时间】:2020-09-12 08:58:25 【问题描述】:在我的表中错误地存储了多个引号。假设某个时间两个双引号存储在项目名称中,例如 Alzheimer''s Disease (AD)
或 Alzheimer'''s Disease (AD)
或 Alzheimer'''''''''s Disease (AD)
。
现在我想执行一个 SQL 查询,该查询将在 itemname
列中找到多个单引号并将这些多引号替换为单引号。
这样我可以用单引号更新双引号
UPDATE MyTable
SET ItemName = REPLACE(ItemName, '''', ''')
我认为上述声明不会做我想做的事。
我想查找多个引号并将其替换为单引号。
如果有两个引号或8个引号或5个引号表示多个引号。项目名称列中的多个引号将替换为单引号。所以请告诉我什么查询可以很好地完成这项工作。
我已经提到,在我的案例中,没有任何引用是未知的,它存储在表的项目名称列中。
那么如何检测哪些数据必须引用多个并相应更新呢?
请提出一些代码示例。谢谢
【问题讨论】:
【参考方案1】:这是一种方法:使用嵌套的replace()
调用:
replace(replace(replace(mycol, '''', '+-'), '-+', ''), '+-', '''')
Demo on DB Fiddle:
select mycol, replace(replace(replace(mycol, '''', '+-'), '-+', ''), '+-', '''') mycol_new
from (values
('Alzheimer''s Disease (AD)'),
('Alzheimer''''s Disease (AD)'),
('Alzheimer''''''''''s Disease (AD)')
) t(mycol)
麦考尔 | mycol_new
:---------------------------- | :------------------------
阿尔茨海默病 (AD) |阿尔茨海默病 (AD)
阿尔茨海默病 (AD) |阿尔茨海默病 (AD)
阿尔茨海默病 (AD) |阿尔茨海默病 (AD)
【讨论】:
我不知道有多少引号?所以我需要一个逻辑来找出那些引号发现不止一个的记录,并且 sql 用单引号替换所有引号。 这些字符用于 '+-' 或 '-+' 是什么?不清楚它是如何工作的! @KendoStarter:这确实适用于可变数量的引号,正如您在演示中看到的那样。+-
和 -+
只是一对相互镜像的随机字符。这也可以是'%*
和*%
,或者
和
。
对不起,我不明白 +- 和 -+ 字符的用法。帮助我了解它们的用法。这些字符在更新中做了什么?
@KendoStarter 获取 GMB 的代码并将 选择列表 替换为 mycol, replace(mycol, '''', '+-') Step1, replace(replace(mycol, '''', '+-'), '-+', '') Step2, replace(replace(replace(mycol, '''', '+-'), '-+', ''), '+-', '''') mycol_new
以查看中间步骤。【参考方案2】:
您需要在UPDATE
语句中使用双引号。但除此之外,您的陈述应该有效。
如果您有超过 2 个引号的组合,则可以多次执行该语句,例如在 WHILE 循环中:
WHILE (@@ROWCOUNT >0)
BEGIN
UPDATE MyTable
SET ItemName=REPLACE(ItemName,'''''','''')
WHERE ItemName LIKE '%''''%'
END
【讨论】:
我会在几个小时后检查并通知您,因为我不在 sql server pc 之前。谢谢你的回答。以上是关于SQL Server:如何在表数据中用单引号查找和替换多引号的主要内容,如果未能解决你的问题,请参考以下文章