Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将所有连字符之前或之后不带空格的连字符替换为空格_Mysql_Sql_Regex_String - Fatal编程技术网

Mysql 将所有连字符之前或之后不带空格的连字符替换为空格

Mysql 将所有连字符之前或之后不带空格的连字符替换为空格,mysql,sql,regex,string,Mysql,Sql,Regex,String,我有一个表,它有一个列,其中可能有几千个短语出现,用破折号代替空格。例如: my-name-is-jack 我需要找到这些事件并用空格替换破折号。 但是,还有一些带有破折号的短语,它们前面和/或后面有空格,不应更改。例如: stackoverflow - a cool site for developers 我该怎么做这样的事 *我假设我会使用Regex,但是我从来没有见过在Mysql中使用Regex。 如果能得到任何帮助,我将不胜感激 谢谢 通常的解决方案是用数据中不可能出现的子字符串替换

我有一个表,它有一个列,其中可能有几千个短语出现,用破折号代替空格。例如:

my-name-is-jack
我需要找到这些事件并用空格替换破折号。 但是,还有一些带有破折号的短语,它们前面和/或后面有空格,不应更改。例如:

stackoverflow - a cool site for developers
我该怎么做这样的事

*我假设我会使用Regex,但是我从来没有见过在Mysql中使用Regex。 如果能得到任何帮助,我将不胜感激


谢谢

通常的解决方案是用数据中不可能出现的子字符串替换不应该接触的子字符串,进行实际替换,然后撤消临时替换:

SELECT test, REPLACE(REPLACE(REPLACE(test, ' - ', '^^^'), '-', ' '), '^^^', ' - ') AS result
FROM (
    SELECT 'my-name-is-jack - stackoverflow' AS test
) AS tests
-- returns "my name is jack - stackoverflow"

MySQL版本???如果你搜索regex MySQL,我相信你会找到很多例子来说明如何使用它。@SalmanA MySQL版本14.14发行版5.5.59,适用于Linux x86_64,使用readline 5.1。根据你的回答,这就是我想到的。我还是犯了个错误。我不确定该做什么测试。你能解释一下吗?谢谢这只是一个示例,您可以在最喜欢的sql客户机中复制粘贴。在现实世界中,你们会用列名替换test,用实际的FROM子句替换FROM-AS测试。至少我现在并没有收到任何错误。澄清-表名为FULL,字段名为title。我哪里出错了?选择标题、替换标题、“-”、“^^^”、“-”、“^^^”、“-”作为从全集选择*的结果,其中标题=“[a-z0-9]-[a-z0-9]”作为标题非常感谢您的帮助!你的where子句显然是错误的。。。看起来像正则表达式模式而不是字符串。尝试选择标题,替换。。。从标题为“%-%”的完整文件或选择标题,替换。。。从标题REGEXP“[a-z0-9]-[a-z0-9]”处的FULL开始