2017-02-20 7 views
0

У меня есть таблица с целым столбцом. Он имеет 12 записей с номерами от 1000 до 1012. Помните, что это ints.Postgres SQL - разные результаты запроса LIKE с использованием OR vs ||

Этот запрос возвращает, как и ожидалось, 12 Результаты:

select count(*) from proposals where qd_number::text like '%10%' 

, как делает это:

SELECT COUNT(*) FROM "proposals" WHERE (lower(first_name) LIKE '%10%' OR qd_number::text LIKE '%10%') 

, но этот запрос возвращает 2 записи:

SELECT COUNT(*) FROM "proposals" WHERE (lower(first_name) || ' ' || qd_number::text LIKE '%10%') 

, который предполагает использование | | в конкатенации, где выражения не эквивалентны использованию OR. Это правильно или я пропустил что-то еще здесь?

+0

Где [в руководстве] (https://www.postgresql.org/docs/current/static/index.html) вы нашли утверждение, что '||' эквивалентно 'OR'? –

+0

Где, в моем вопросе, я упоминал, что в руководстве утверждалось, что? – rmcsharry

+0

"* подразумевает, что использование || не эквивалентно использованию OR .. *" звучит так же, как если бы вы ожидали, что '||' будет 'OR' –

ответ

4

У вас, вероятно, есть нули в first_name. Для этих записей (lower(first_name) || ' ' || qd_number::text результаты null, так что вы не найдете их больше.

+0

Бинго, это была причина (поверх меня, думая, что || эквивалентен OR, но теперь я знаю, что это на самом деле строка concat!) – rmcsharry

2

с использованием || в сцепляются, где выражения не эквивалентно использованию OR
Это правильно или я упускаю что-то еще здесь?

Это правильно.

|| является string concatenation operator in SQL, а не оператором OR.