我试图只获取 sql 查询的前两个词,我正在使用匹配项:^\w{2}-
但没有成功,因为我什么也没有,我需要获得这些值
BA、CE、DF、ES、GO,我不知道我该怎么做,下面是一些数据示例。
SC&Tipo=FM
SC&Tipo=Web
SC&Tipo=Comunitaria
RS&Tipo=Todas
RS&Tipo=AM
RS&Tipo=FM
RS&Tipo=Web
RS&Tipo=Comunitaria
BA-Salvador&Tipo=12horas
CE-Fortaleza&Tipo=12horas
CE-Interior&Tipo=12horas
DF-Brasilia&Tipo=12horas
ES-Interior&Tipo=12horas
ES-Vitoria&Tipo=12horas
GO-Goiania&Tipo=12horas
MG-ZonaDaMata/LestedeMinas&Tipo=12horas
MG-AltoParanaiba&Tipo=12horas
MG-BeloHorizonte&Tipo=12horas
MG-CentroOestedeMinas&Tipo=12horas
查询:SELECT * FROM tabel WHERE filter REGEXP '^\w{2}-'
编辑已解决:
解决查询应该是:
SELECT SUBSTRING(column, 1, 2) AS column FROM table WHERE column REGEXP '^[[:alnum:]_]{2}-'
最佳答案
MySQL 不支持字符类 \w
或 \d
。您必须使用 [[:alnum:]]
而不是 \w
。您可以找到所有支持的 character classes on the official MySQL documentation .
因此您可以使用以下解决方案使用 REGEXP
:
SELECT *
FROM table_name
WHERE filter REGEXP '^[[:alnum:]]{2}-'
您也可以使用以下命令通过正则表达式获取结果,使用 REGEXP_SUBSTR
:
SELECT REGEXP_SUBSTR(filter, '^[[:alnum:]]{2}-')
FROM table_name
WHERE filter REGEXP '^[[:alnum:]]{2}-';
或者另一种使用 HAVING
来过滤结果的解决方案:
SELECT REGEXP_SUBSTR(filter, '^[[:alnum:]]{2}-') AS colResult
FROM table_name
HAVING colResult IS NOT NULL;
要获取 MySQL 8.0 之前的值,您可以将以下内容与 LEFT
一起使用:
SELECT LEFT(filter, 3)
FROM table_name
WHERE filter REGEXP '^[[:alnum:]]{2}-';
关于mysql - Regex 带来恰到好处的匹配 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55044686/