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:如何在表数据中用单引号查找和替换多引号的主要内容,如果未能解决你的问题,请参考以下文章

sql要查找的数据中有双引号咋办?

如何使用单引号 sql server 2005 插入文本

sql server 如何去除双引号

sql语句中有单引号怎么办

sql语句中,如何表示单引号

如何用sql语句插入一个带有单引号的值