MySQL可以替换多个字符吗?

MySQL可以替换多个字符吗?,mysql,sql,string,replace,Mysql,Sql,String,Replace,我试图替换MySQL字段中的一组字符。我知道REPLACE函数,但它一次只替换一个字符串。我看不到任何合适的功能 我可以一次替换或删除多个字符串吗?例如,我需要用破折号替换空格并删除其他标点。您可以使用以下替换函数: select replace(replace('hello world','world','earth'),'hello','hi') 这将打印hi earth 您甚至可以使用子查询替换多个字符串 select replace(london_english,'hello','hi

我试图替换MySQL字段中的一组字符。我知道REPLACE函数,但它一次只替换一个字符串。我看不到任何合适的功能


我可以一次替换或删除多个字符串吗?例如,我需要用破折号替换空格并删除其他标点。

您可以使用以下替换函数:

select replace(replace('hello world','world','earth'),'hello','hi')
这将打印
hi earth

您甚至可以使用子查询替换多个字符串

select replace(london_english,'hello','hi') as warwickshire_english
from (
    select replace('hello world','world','earth') as london_english
) sub
或者使用联接替换它们:

select group_concat(newword separator ' ')
from (
    select 'hello' as oldword
    union all
    select 'world'
) orig
inner join (
    select 'hello' as oldword, 'hi' as newword
    union all
    select 'world', 'earth'
) trans on orig.oldword = trans.oldword

我将使用公共表表达式进行翻译作为读者的练习;)

您可以链替换函数:

select replace(replace('hello world','world','earth'),'hello','hi')
这将打印
hi earth

您甚至可以使用子查询替换多个字符串

select replace(london_english,'hello','hi') as warwickshire_english
from (
    select replace('hello world','world','earth') as london_english
) sub
或者使用联接替换它们:

select group_concat(newword separator ' ')
from (
    select 'hello' as oldword
    union all
    select 'world'
) orig
inner join (
    select 'hello' as oldword, 'hi' as newword
    union all
    select 'world', 'earth'
) trans on orig.oldword = trans.oldword

我将使用公共表表达式进行翻译作为读者的练习;)

级联是mysql中唯一简单直接的多字符替换解决方案

UPDATE table1 
SET column1 = replace(replace(REPLACE(column1, '\r\n', ''), '<br />',''), '<\r>','')
更新表1
设置column1=replace(replace(replace(column1,'\r\n',''),'
','','','')
级联是mysql中唯一简单直接的多字符替换解决方案

UPDATE table1 
SET column1 = replace(replace(REPLACE(column1, '\r\n', ''), '<br />',''), '<\r>','')
更新表1
设置column1=replace(replace(replace(column1,'\r\n',''),'
','','','')
在字符串中出现的任何地方替换字符或短语都是一项简单的工作。但是,当清洗标点符号时,您可能需要寻找模式——例如文本的特定部分的空白或字符序列,例如在单词的中间或完全停止后。如果是这样的话,正则表达式替换函数将更加强大


更新:如果使用MySQL版本8+,则提供一个函数,可以按如下方式调用:

SELECT txt,
       REGEXP_REPLACE(REPLACE(txt, ' ', '-'),
                      '[^a-zA-Z0-9-]+',
                      '') AS `reg_replaced`
FROM test;


上一个答案-仅当使用版本8之前的MySQL时,请继续阅读:

坏消息是,但好消息是,有可能提供一个解决方案-请参阅

我可以一次替换或删除多个字符串吗?例如,我需要 用破折号替换空格并删除其他标点符号

通过正则表达式替换程序和标准
REPLACE
函数的组合,可以实现上述功能。这可以在行动中看到

SQL(为了简洁起见,不包括函数代码):

SELECT txt,
       reg_replace(REPLACE(txt, ' ', '-'),
                   '[^a-zA-Z0-9-]+',
                   '',
                   TRUE,
                   0,
                   0
                   ) AS `reg_replaced`
FROM test;
在字符串中出现的任何地方替换字符或短语都是一项简单的工作。但是,当清洗标点符号时,您可能需要寻找模式——例如文本的特定部分的空白或字符序列,例如在单词的中间或完全停止后。如果是这样的话,正则表达式替换函数将更加强大


更新:如果使用MySQL版本8+,则提供一个函数,可以按如下方式调用:

SELECT txt,
       REGEXP_REPLACE(REPLACE(txt, ' ', '-'),
                      '[^a-zA-Z0-9-]+',
                      '') AS `reg_replaced`
FROM test;


上一个答案-仅当使用版本8之前的MySQL时,请继续阅读:

坏消息是,但好消息是,有可能提供一个解决方案-请参阅

我可以一次替换或删除多个字符串吗?例如,我需要 用破折号替换空格并删除其他标点符号

通过正则表达式替换程序和标准
REPLACE
函数的组合,可以实现上述功能。这可以在行动中看到

SQL(为了简洁起见,不包括函数代码):

SELECT txt,
       reg_replace(REPLACE(txt, ' ', '-'),
                   '[^a-zA-Z0-9-]+',
                   '',
                   TRUE,
                   0,
                   0
                   ) AS `reg_replaced`
FROM test;
我一直在使用它,它允许您:

直接在MySQL中使用PCRE正则表达式

安装此库后,您可以执行以下操作:

SELECT preg_replace('/(\\.|com|www)/','','www.example.com');
这将给你:

example
我一直在使用它,它允许您:

直接在MySQL中使用PCRE正则表达式

安装此库后,您可以执行以下操作:

SELECT preg_replace('/(\\.|com|www)/','','www.example.com');
这将给你:

example
关于php

结果

REPLACE(
    REPLACE(
        REPLACE(replace_field, "1", "one"),
    "2", "two"),
"3", "three");
关于php

结果

REPLACE(
    REPLACE(
        REPLACE(replace_field, "1", "one"),
    "2", "two"),
"3", "three");

@扎克:嗯。。。对,你真的读过这个查询吗?我会编辑它;)对不起,我想提出我一直在使用的问题。我希望能有类似PHP的
str_replace
函数的东西,但我猜它不存在;任何人都不应该提供与CTE等价的查询…链接替换可能会导致替换您已经替换的东西的问题,因此如果您确实进行了替换(替换(1234,1,4),4,1),您将无法获得预期的4231;您将得到1231,因此链接替换不是列表替换的完全替代。需要有更好的解决办法。@Zak:嗯。。。对,你真的读过这个查询吗?我会编辑它;)对不起,我想提出我一直在使用的问题。我希望能有类似PHP的
str_replace
函数的东西,但我猜它不存在;任何人都不应该提供与CTE等价的查询…链接替换可能会导致替换您已经替换的东西的问题,因此如果您确实进行了替换(替换(1234,1,4),4,1),您将无法获得预期的4231;您将得到1231,因此链接替换不是列表替换的完全替代。需要一个更好的解决方案。正如在另一个答案中所观察到的,这可能不起作用。例如,链将B C替换为C D E,将A替换为C,然后将C替换为E,这样“HAL”就不会变成“HCL”,而是“HEL”。正如在另一个答案中观察到的,这可能不起作用。例如,用cde替换bc的链将用C替换A,然后用E替换C,这样“HAL”就不会变成“HCL”而是“HEL”。如果您想要一个没有替换项的空字符串,这是可以的,但我认为启动
$sqlReplace='replace_字段'涵盖了更多的情况,更容易阅读。如果你想要一个没有替换的空字符串,这将是好的,但我认为