сопоставьте число с помощью регулярных выражений для числа, разделенного запятыми - PullRequest
1 голос
/ 19 марта 2020

У меня есть строка, которая содержит число, разделенное запятой, как показано ниже.

15,22,20,26,33,445,40,44,22,225,115,2

Я хочу знать, есть ли число, говорящее 15, в этой строке или нет.

Проблема в том, что 15 и 115 оба совпадают.

То же самое для другое число, скажем, 2, для этого случая 20, 25 и 225 совпадают.

Только для обоих случаев оно должно возвращаться, если в 15 или 2 строка.

Я пытался использовать ключевое слово like, но оно не работает. Он также возвращает строки с 115 или 20, 225, 222

при совпадении 15 and 2 соответственно.

Кто-нибудь может предложить шаблон regex?

Обновление

У меня есть запрос, подобный приведенному ниже, где я использовал ключевое слово like, но Я получил неправильный результат по вышеуказанной причине.

SELECT DISTINCT A.id,A.title,A.title_hi,A.cId,B.id as cid1,A.report_type ,A.icon_img_url, A.created_at , A.news_date 
FROM tfs_report_news A, tfs_commodity_master B
WHERE (',' + RTRIM(A.cId) + ',') LIKE ('%,' + B.id + ',%')
AND A.ccId = B.ccId AND A.`report_type`= "M" 
AND A.isDeleted=0 AND A.isActive=1 AND B.isDeleted=0 
AND B.status=1 
AND A.news_date= (SELECT MAX(T.news_date) 
FROM tfs_report_news T WHERE (',' + RTRIM(T.cId) + ',') 
LIKE ('%,' + B.id + ',%'))
ORDER BY created_at desc, id desc limit 100;



Здесь tfs_report_news содержит строку 15,22,20,26,33,445,40,44,22,225,115,2 в качестве имени столбца

cId и индивидуальный cId как 15 или 2 является id из tfs_commodity_master

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

В MySQL вы запрашивали строковую функцию 1002 *:

Возвращает значение в диапазоне от 1 до N если строка str находится в списке строк strlist, состоящем из N подстрок. Список строк - это строка, состоящая из подстрок, разделенных , символами [...] Возвращает 0, если str отсутствует в strlist или если strlist - пустая строка. Возвращает NULL, если один из аргументов равен NULL.

. Чтобы проверить, присутствует ли значение в списке, вы можете просто сделать:

find_in_set('15', '15,22,20,26,33,445,40,44,22,225,115,2') > 0

Примечание: здесь - рекомендуемое значение.

1 голос
/ 19 марта 2020

Использовать FIND_IN_SET:

SELECT
    CASE WHEN FIND_IN_SET('15', csv) > 0 THEN 'yes' ELSE 'no' END AS result
FROM yourTable;

Другой вариант будет использовать LIKE:

SELECT
    CASE WHEN CONCAT(',', csv, ',') LIKE '%,15,%' THEN 'yes' ELSE 'no' END AS result
FROM yourTable;

Наконец, вы также можете использовать REGEXP здесь:

SELECT
    CASE WHEN csv REGEXP '[[:<:]]15[[:>:]]' THEN 'yes' ELSE 'no' END AS result
FROM yourTable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...