Как строится синтаксис проверки поля на NULL или значение

Generalproger
Дата: 09.04.2015 13:40:16
Есть поле param с типом text[], нужно выбрать поля где второй элемент этого массива является NULL или определенным текстом
WHERE param[2]=(NULL||'23')
почему то не проходит, поскольку выборка с несколькими проверками то вбивать
param[2] IS NULL OR param[2] = '23' не хочется т.к. в проверке должны быть все AND и париться с повторением всей проверочной части еще раз не хочется
fte
Дата: 09.04.2015 13:53:47
Можно так:
where nullif(param[2],23) is null
Generalproger
Дата: 09.04.2015 14:05:27
fte,
Спасибо огромное, то что надо, кстати может вы еще знаете как организовать запрос

ГДЕ ПОЛЕ = 0 (ЕСЛИ ПОЛЕ != 0 ТО ПОЛЕ < ЗНАЧЕНИЕ)
fte
Дата: 09.04.2015 14:54:10
Можно и так:
select * 
from (
    select * from generate_series(0,21) f
) r
where coalesce(nullif(f,0)<15,true) 
p2.
Дата: 09.04.2015 15:29:58
Generalproger
fte,
Спасибо огромное, то что надо, кстати может вы еще знаете как организовать запрос

ГДЕ ПОЛЕ = 0 (ЕСЛИ ПОЛЕ != 0 ТО ПОЛЕ < ЗНАЧЕНИЕ)

ПОЛЕ < greatest(ЗНАЧЕНИЕ, 0+)

А ЗНАЧЕНИЕ, случаем, всегда положительное? И типы integer?
qwwq
Дата: 09.04.2015 15:41:08
не учите деточку антипаттернам.
// простите не удержался.

правильно с т.з. оптимизатора -- именно перечислить вот это вот всё в OR * [и охватить (), чтобы не собирать алтернативный OR снаружи]

даже такоё сахарок как IS DISTINCT FROM не охвачен отражением на индексное сравнение.

-- а почему -- просто подумайте над количеством операций, когда оно над константой (параметром), и когда -- над полем таблицы (всё вот это вот: "поместить, сравнить, присвоить").
не говоря об индексах

если что-то вам мешает написать правильный WHERE со скобками -- выбросьте это что-то в унитаз.

//* исключением является случай , когда вы озаботились функциональным индексом по именно этому выражению.