#sql #postgresql
Вопрос:
как говорится в названии, пожалуйста, найдите блок кодов, которые работали и не работали соответственно.
select *
from public.transactions
where id in ('ABCDE-3131243553O2')
Запрос выше не сработал, но тот, что ниже, сработал.
select *
from public.transactions
where id ~* 'ABCDE-3131243553O2'
Кто — нибудь знает какую-то конкретную причину, почему? Я гуглил, но безрезультатно. Заранее спасибо!
Комментарии:
1. Покажите нам ваши примерные данные, пожалуйста
2.
~*
не зависит от регистра,in
чувствителен к регистру. — К вашему сведению:in
с одним значением это то же самое, что=
. — Для соответствия регулярному выражению с учетом регистра используйте~
без*
.3. Вероятно, это, вероятно, чувствительность к регистру? ~ * — это совпадение с шаблоном без учета регистра, где, как я подозреваю, вероятно, будет врожденное совпадение с учетом регистра.
4. Я понимаю. Как вы предлагаете мне поступить, если бы у меня было несколько удостоверений личности?
5. Пожалуйста, добавьте какой-нибудь пример
Ответ №1:
Они совсем не эквивалентны. Считать:
where id ~* 'ABCDE-3131243553O2'
Это соответствует любой строке, содержащей выражение. Например, это возвращает обе строки.
select *
from (values ('ABCDE-3131243553O2'), ('blahblahblahABCDE-3131243553O2foofoofoo')) v(id)
where id ~* 'ABCDE-3131243553O2';
Эквивалентное регулярное выражение для =
или in
равно:
where id ~* '^ABCDE-3131243553O2
Это закрепляет шаблон, поэтому никакие другие символы не допускаются.
Если вы не получаете совпадение, используя in
, когда вы его ожидаете, то вероятной причиной являются скрытые символы в данных (или, возможно, значение сравнения). Наиболее распространенными "скрытыми" символами являются пробелы в начале или конце. Другой проблемой могут быть похожие персонажи. 1
Действительно 1
ли это а или нижний регистр L
?
Это закрепляет шаблон, поэтому никакие другие символы не допускаются.
Если вы не получаете совпадение, используя in
, когда вы его ожидаете, то вероятной причиной являются скрытые символы в данных (или, возможно, значение сравнения). Наиболее распространенными «скрытыми» символами являются пробелы в начале или конце. Другой проблемой могут быть похожие персонажи. 1
Действительно 1
ли это а или нижний регистр L
?