在MySQL查询中重复带删除和空格的单词

时间:2014-10-27 22:24:32

标签: mysql regex mariadb

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

AT& T商店
O'Reilly的汽车零件
汉堡王

我用MySQL查询导入Sphinx Search。我有MariaDB,所以有一个REGEXP_REPLACE(col,regexp,replace)函数,但是我无法弄清楚其余部分。

我需要的是重复使用和不使用空格替换非字母数字字符的单词。所以上面的例子将成为:

ATT at T Store
OReillys O Reilly的汽车零件
汉堡王

这是否可以在MySQL查询中使用?谢谢!

2 个答案:

答案 0 :(得分:2)

这可以一次完成,但可能不是由SQL原始正则表达式完成的。

我不知道REGEXP_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可以做的事情,所以你可能需要发挥创意。

答案 1 :(得分:1)

REGEXP_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')