#sql #sql-like #presto
Вопрос:
Я пытаюсь получить результаты, которые позволят мне использовать 2 варианта для предложения LIKE, но также указать конкретную дату. Этот запрос выдает мне только строки с dt 2021-06-04
SELECT * FROM table.name
where
dt = date '2021-06-04'
Тем не менее, этот запрос удовлетворяет 2 вариантам LIKE, но, похоже, полностью игнорирует мои критерии dt=. Это дает мне результаты за все время, а не только за 2021-06-04
SELECT * FROM table.name
where
dt = date '2021-06-04'
and
item_code like 'RNW%'
OR
item_code like 'XX%'
Ответ №1:
Ваши условия обрабатываются слева направо, поэтому то, что вы написали, по сути, будет работать следующим образом:
SELECT * FROM table.name
where
(dt = date '2021-06-04' and item_code like 'RNW%')
OR
item_code like 'XX%'
Чтобы исправить это, добавьте круглые скобки, чтобы сгруппировать условия так, как вы хотите:
SELECT * FROM table.name
where
dt = date '2021-06-04'
and
( item_code like 'RNW%' OR item_code like 'XX%' )
Ответ №2:
как упоминал Гордон , вам нужно больше узнать о приоритетах операций в sql, вы можете указать приоритеты, используя скобки
SELECT * FROM table.name
where
dt = date '2021-06-04'
and (item_code like 'RNW%' OR item_code like 'XX%')