我正在尝试仅获取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}-'
答案 0 :(得分:1)
使用SUBSTRING(<column>, 1, 2)
也应该可以。
或多或少像下面
SELECT
<column>
, SUBSTRING(<column>, 1, 2)
FROM
<table>
WHERE
SUBSTRING(<column>, 1, 2) IN ('BA' [,<value>..])
有些事情是SQL代码中的BNF(巴科斯·纳尔形式)。
<..>
表示替换为您需要的内容。
[, ..]
表示可选的无限制重复逗号,其中SQL语法有一部分
答案 1 :(得分:1)
MySQL不支持字符类\w
或\d
。您必须使用\w
来代替[[:alnum:]]
。您可以找到所有受支持的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}-';