不确定这在MySQL中是否可行,但我有一个列,其业务名称如下:
AT&T商店
奥赖利汽车零部件
汉堡王
我使用MySQL查询将其导入到狮身人面像搜索中。我有MariaDB,所以有一个REGEXP_REPLACE(col,regexp,REGEXP_REPLACE)函数,但是我找不到剩下的。
我需要的是重复单词与非字母数字字符替换和没有空格。因此,上述例子将成为:
ATT商店
OReillys O Reilly的汽车零部件
汉堡王
这在MySQL查询中是可能的吗?谢谢!
发布于 2014-10-28 11:34:47
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')发布于 2014-10-28 01:24:23
这可以一次性完成,但可能不是通过SQL原语regex完成的。
我不懂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可以做的事情,所以您可能必须要有创造性。
https://stackoverflow.com/questions/26597898
复制相似问题