MySQL выбрать строку столбца с LIKE или REGEX на основе подстроки с разделителями
Я должен сравнить значение столбца с числами пользовательского ввода. Строка в столбце имеет формат 8|5|12|7|
Теперь мне нужно сравнить введенные пользователем значения 2
,5
,3
с этим значением столбца
Когда я использую оператор LIKE как '%2|%'
Я получил вывод путем сопоставления со значением столбца |12|
Как мне сопоставить строку с помощью Regular Expression
или любым другим способом?
4 ответа
Если я правильно понял вопрос, то чтобы убедиться, что вы получите 2|..
или же ..|2|..
или же |2
нужно добавить or
статьи
where col like '%|2|%'
or col like '2|%'
or col like '%|2'
or col='2'
Что-то похожее на это, чтобы проверить 2
в этом примере 12|8|12|5|12|7|2|12|22
# (^|\|)2(\||$)
#
#
# Match the regex below and capture its match into backreference number 1 «(^|\|)»
# Match this alternative (attempting the next alternative only if this one fails) «^»
# Assert position at the beginning of the string «^»
# Or match this alternative (the entire group fails if this one fails to match) «\|»
# Match the character “|” literally «\|»
# Match the character “2” literally «2»
# Match the regex below and capture its match into backreference number 2 «(\||$)»
# Match this alternative (attempting the next alternative only if this one fails) «\|»
# Match the character “|” literally «\|»
# Or match this alternative (the entire group fails if this one fails to match) «$»
# Assert position at the end of the string, or before the line break at the end of the string, if any (line feed) «$»
REGEXP "(^|\|)2(\||$)"
Это позволяет столбцу значение просто 2
или же 2|anything
или же anything|2
или же first thing|2|end thing
,
Это плохой дизайн, чтобы строить "массивы" в ячейке. Используйте отдельную таблицу.
Тем не мение, FIND_IN_SET()
это функция, которая делает работу намного проще, чем регулярное выражение. (Но вы должны использовать ",")
Посмотрев на дизайн колонки, вы можете сделать один из способов: LIKE '%|2|%'