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|%'

Другие вопросы по тегам