SQL方法用单个空格替换重复空格

标签 sql

有没有更优雅的方法来做到这一点。我想用单个空格替换重复的空格......

   declare @i int

    set @i=0
    while @i <= 20
    begin
        update myTable
        set myTextColumn = replace(myTextColumn, '  ', ' ')
        set @i=@i+1
    end

(它的 sql server 2000 - 但我更喜欢通用 SQL)

最佳答案

这有效:

UPDATE myTable
SET myTextColumn =
    REPLACE(
        REPLACE(
            REPLACE(myTextColumn
                ,'  ',' '+CHAR(1)) -- CHAR(1) is unlikely to appear
        ,CHAR(1)+' ','')
    ,CHAR(1),'')
WHERE myTextColumn LIKE '%  %'

完全基于集合;没有循环。

因此,我们用一个不寻常的字符和一个空格替换任意两个空格。如果我们将不常见的字符称为 X,则 5 个空格变为:“X X ”,6 个空格变为“X X X”。然后我们用空字符串替换“X”。因此,5 个空格变为“”,6 个空格变为“X”。然后,如果空格数为偶数,我们将删除所有剩余的“X”,留下一个空格。

关于SQL方法用单个空格替换重复空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182877/

相关文章:

.NET 应用程序使用的 SQL View 超时

sql - 用先前的 NOT NULL 行更新 NULL 行

mysql - 在 MySQL 中连接两个表

sql - Access 2016 - SQL 求和查询不提供求和,没有错误

SQL 到 UML 图或图形工具

sql - 删除 SQL 中括号内的文本

MySQL 请求 COUNT 问题

java - 将参数从 Java 传递给 Sql

2个表的SQL主键

c# - 插入多对多数据库?