в массив, а чистый нулл нет?
sql
SELECT ARRAY[1, 2] || NULL --> {1,2}
SELECT ARRAY[1, 2] || NULLIF(1,1) --> {1,2,null}
postgres=# select array[1,2] || NULL::int; ?column? ------------ {1,2,NULL} (1 row)
Прикольно. Чет до этого не додумался. А есть вариант как его превратить в самый нуловый нул без типа?)
а что такое null без типа? у вас же операция соединения и надо к типу приводить
Это не без типа. Это integer[].
Типа, массив длины 0. Длина массива, к которому он присоединяется -- увеличивается на 0. А null::integer -- присоединяет один элемент длины 1 и увеличивает длину на 1.
Ну вот поведение разное, когда null уже прикастован, и пока еще нет. При этом в мануале сказано что если нужно добавлять нуллы - то используйте array_append(...). Сейчас вообщем-то в конце работы функции делаю просто array_remove(x, null). Просто если есть вариант упростить)
где разное поведение? функция уже дала ответ типа int, а вы литерал не привели к типу
Вот в первом примере, когда || null - выходит оно не приводит тип к int, и null не попадает в результат
ну и? разное с чем?
Хорошо, не разное. Немного неожиданное, сходу ожидаешь что null::int не будет попадать
это оракл делает неявное преобразование сам. постгрис нет, всегда нужно делать самому явное преобразование типов
а еще оракл умеет делать неявное преобразования явным образом ) индийский код +0 )
иногда из-за этого неявного преобразования бывает жопа. в постгрис решили в это не лезть
согласен, все неявное - зло
Обсуждают сегодня