在MySQL查询中使用delete和space重复单词

在MySQL查询中使用delete和space重复单词,mysql,regex,mariadb,Mysql,Regex,Mariadb,我不确定这在MySQL中是否可行,但我有一个列,它的商业名称如下: AT&T商店 奥雷利汽车配件公司 汉堡王 我使用MySQL查询将其导入Sphinx搜索。我有MariaDB,所以有一个REGEXP_REPLACE(col,REGEXP,REPLACE)函数,但是我很难理解其余的 我需要的是用非字母数字字符重复单词,替换为空格或空格。因此,上述示例将变成: T店的收件人 奥雷利奥雷利的汽车零部件 汉堡王 这在MySQL查询中可能吗?谢谢 这可以一次完成,但可能不能通过SQL原语regex完成 我

我不确定这在MySQL中是否可行,但我有一个列,它的商业名称如下:

AT&T商店
奥雷利汽车配件公司
汉堡王

我使用MySQL查询将其导入Sphinx搜索。我有MariaDB,所以有一个REGEXP_REPLACE(col,REGEXP,REPLACE)函数,但是我很难理解其余的

我需要的是用非字母数字字符重复单词,替换为空格或空格。因此,上述示例将变成:

T店的收件人
奥雷利奥雷利的汽车零部件
汉堡王


这在MySQL查询中可能吗?谢谢

这可以一次完成,但可能不能通过SQL原语regex完成

我不知道REGEXP\u REPLACE,也不知道现代的SQL

通常由三个正则表达式完成

伪代码:

$column_val = "O'Reilly's Auto Parts";
$new_column_val = Replace_Globally(  
                     $column_val,
                     '\b\w+[[:punct:]](?:[[:punct:]]*\w)+\b',  
                     function( $match ) {
                            $val = $match.value;
                            $text1 = Replace_Globally( $val, '[[:punct:]]+', "" ); 
                            $text2 = Replace_Globally( $val, '[[:punct:]]+', " " ); 
                            return $text1 + " " + $text2;
                      }
                  );

因此,这看起来可能不像sql所能做的,因此您可能需要发挥创造性。

REGEXP\u REPLACE仅在MariaDB中,MySQL没有

select regexp_replace(regexp_replace(
"AT&T Store
O'Reilly's Auto Parts
Burger King",
'([[:alnum:]]+)[[:punct:]]+([[:alnum:]]+)[[:punct:]]+([[:alnum:]]+)',
'\\1\\2\\3 \\1 \\2 \\3'),
'([[:alnum:]]+)[[:punct:]]+([[:alnum:]]+)',
'\\1\\2 \\1 \\2')

谢谢我会试试看,看看我能做些什么。这很有效。只需将列中列出的名称替换为列,它在所有列中都表现良好。还必须升级到MariaDB 10,因为5.5不支持regexp\u替换。谢谢另外,为了在PHP中进行插入,我可以使用:preg_replace('~([:alnum:]+)[:punch:]+([:alnum:]+),'\\1\\2\\1\\2',preg_replace('~([[:alnum:]+)[:punch:]++([:alnum:]+)[:punch:]++([:alnum:]+]),'\\1\\2\\3',$variablebleString]);