В SQL, как мы можем сопоставить, используя LIKE с количеством символов подстановки, но не превышая его? - PullRequest
0 голосов
/ 29 августа 2018

например. в регулярном выражении мы можем использовать {n, m}, чтобы указать, что мы хотим сопоставить предыдущий элемент не менее n раз, но не более m раз.

Есть ли способ сделать это в SQL (в частности, в sqlite), при котором мы сопоставляем подстановочный знак '_' до 5 раз, но не более?

например. Я хочу до 5 символов между буквами j и z

Итак, я бы получил Jaz или Jaaaaaz, но не Jaaaaaaz

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Чтобы ответить на ваш конкретный вопрос, вы можете просто использовать

WHERE col LIKE 'J%z' AND LENGTH(col) < 8

например.

SELECT 'Jaaaz' LIKE 'J%z' AND LENGTH('Jaaaz') < 8, 'Jaaaaaaz' LIKE 'J%z' AND LENGTH('Jaaaaaaz') < 8

выход

1    0
0 голосов
/ 29 августа 2018

Вы можете добавить модуль регулярных выражений в SQLite. Вероятно, это лучшее решение вашей проблемы.

Вы можете делать то, что вы хотите, как:

where col not like '______'  -- 6 underscores

Или, проще:

when length(col) < 6

Это прямой ответ на ваш вопрос.

EDIT:

Вы можете сделать до пяти символов:

where col like 'j%z' and
      col not like 'j______z'

Или используйте более грубую силу:

where col like 'jz' or
      col like 'j_z' or
      col like 'j__z' or
      col like 'j___z' or
      col like 'j____z' or
      col like 'j_____z' 

Если вы хотите, чтобы эти шаблоны находились внутри строки (а не всей строки), включите % в начале и конце шаблона.

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