【问题标题】:SQL Server: How to find and replace multiple quote with single quote in table dataSQL Server:如何在表数据中用单引号查找和替换多引号
【发布时间】: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个引号表示多个引号。项目名称列中的多个引号将替换为单引号。所以请告诉我什么查询可以很好地完成这项工作。

我已经提到,在我的案例中,没有任何引用是未知的,它存储在表的项目名称列中。

那么如何检测哪些数据必须引用多个并相应更新呢?

请提出一些代码示例。谢谢

【问题讨论】:

    标签: sql sql-server string tsql sql-update


    【解决方案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 之前。谢谢你的回答。
    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 2018-12-03
    • 2015-09-24
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多