不确定这是否可以在MySQL中使用,但我的列有一个商业名称,如:
AT& T商店
O'Reilly的汽车零件
汉堡王
我用MySQL查询导入Sphinx Search。我有MariaDB,所以有一个REGEXP_REPLACE(col,regexp,replace)函数,但是我无法弄清楚其余部分。
我需要的是重复使用和不使用空格替换非字母数字字符的单词。所以上面的例子将成为:
ATT at T Store
OReillys O Reilly的汽车零件
汉堡王
这是否可以在MySQL查询中使用?谢谢!
答案 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')