Regex приносит только соответствие MySQL - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь получить только первые два слова в 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}-'

Ответы [ 2 ]

1 голос
/ 07 марта 2019

MySQL не поддерживает класс символов \w или \d.Вместо \w вы должны использовать [[:alnum:]].Вы можете найти все поддерживаемые классы символов в официальной документации MySQL .

. Таким образом, вы можете использовать следующее решение, используя 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}-';

демо: https://www.db -fiddle.com / f / 7mJEmCkEiYhCYK3PcEZTNE / 0

1 голос
/ 07 марта 2019

Использование SUBSTRING(<column>, 1, 2) также должно работать ..

Более или менее, как показано ниже

SELECT 
   <column>
 , SUBSTRING(<column>, 1, 2) 
FROM
 <table>
WHERE 
 SUBSTRING(<column>, 1, 2) IN ('BA' [,<value>..])

В SQL-коде некоторые вещи имеют вид BNF (форма Бэкуса-Наура).

<..> означает заменить на то, что вам нужно.
[, ..] означает необязательное неограниченное повторение запятой, в которой есть часть синтаксиса SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...