MySQL可以替换多个字符吗?
我试图替换MySQL字段中的一组字符。我知道REPLACE函数,但它一次只替换一个字符串。我看不到任何合适的功能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
我可以一次替换或删除多个字符串吗?例如,我需要用破折号替换空格并删除其他标点。您可以使用以下替换函数:
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_字段'代码>涵盖了更多的情况,更容易阅读。如果你想要一个没有替换的空字符串,这将是好的,但我认为