我有一个使用 REGEXP 的 mysql 查询,该查询将字段的开头与“A”、“An”和“The”相匹配,如果匹配则后跟空格,然后从第一个空格的开头修剪字段,然后匹配字段的开头带有特殊字符,如 (','',[:space:]) 如果是,则修剪所有前导特殊字符。 Mysql 查询使用 CASE
如下:
CASE
WHEN field_data_field_display_title_field_display_title_value REGEXP '(^(A|An|The)[[:space:]])' = 1 THEN
TRIM(SUBSTR(field_data_field_display_title_field_display_title_value , INSTR(field_data_field_display_title_field_display_title_value ,' ')))
WHEN field_data_field_display_title_field_display_title_value REGEXP '(^[\"\'[:space:]])' = 1 THEN
TRIM(SUBSTR(field_data_field_display_title_field_display_title_value ,2))
ELSE field_data_field_display_title_field_display_title_value
END
我无法修剪所有前导特殊字符,但我可以通过在 SUBSTR
函数中传递“2”来修剪第一个前导特殊字符。由于mysql不支持捕获组,所以我无法获取捕获组中的匹配值。
所以我的问题是如何使用 mysql 查询获取字段中第一个字母字符的位置,以便我可以在 SUBSTR
函数中传递该位置以修剪所有前导特殊字符。我尝试使用 [:alpha:] 类,例如:
TRIM(SUBSTR(field_data_field_display_title_field_display_title_value ,
INSTR(field_data_field_display_title_field_display_title_value ,[:alpha:])))
但是它给出了 mysql 语法错误。或者任何人都可以建议我任何其他方法来修剪所有领先的特殊字符。
提前致谢!
最佳答案
我正在使用我在 ORDER BY 子句中发布的相关 mysql 片段来对数据进行排序。由于我有一小部分想要删除的比赛,所以我遵循了@BillKarwin 的建议。 查询中的 ORDER BY 子句变成类似
ORDER BY
CASE
WHEN field_data_field_display_title_field_display_title_value REGEXP '^(A|An|The)[[:space:]]' = 1 THEN
TRIM(SUBSTR(field_data_field_display_title_field_display_title_value , INSTR(field_data_field_display_title_field_display_title_value ,' ')))
WHEN field_data_field_display_title_field_display_title_value REGEXP '^[\']' = 1 THEN
TRIM(LEADING '\'' FROM field_data_field_display_title_field_display_title_value)
WHEN field_data_field_display_title_field_display_title_value REGEXP '^[[:space:]]' = 1 THEN
TRIM(LEADING ' ' FROM field_data_field_display_title_field_display_title_value)
WHEN field_data_field_display_title_field_display_title_value REGEXP '^[\"]' = 1 THEN
TRIM(LEADING '"' FROM field_data_field_display_title_field_display_title_value)
ELSE field_data_field_display_title_field_display_title_value
END ASC
关于mysql正则表达式获取匹配的第一个字母字符的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848117/