2016-08-23 2 views
-2

Нет версии символа меняющегося поля будет возвращать ничего, кроме NULL, если это не значение ... это действительно расстраиваетPOSTGRES COALESCE (NULLIF (c.name, «»), «Unassigned») не работает

CASE WHEN COALESCE(NULLIF(e.name,''),'unassigned') IS NULL THEN 'unassigned' ELSE a.name END

был мой последний тест, и он по-прежнему просто возвращает NULL если поле не имеет значения

это характер изменения (255)

COALESCE(a.name,'unassigned') // won't work 
NULLIF(a.name,'') // won't work 
NULLIF(a.name,NULL) // won't work 
COALESCE(NULLIF(a.name,''),'unassigned') // won't work 

однако мгновенно я использую 0 он работает ..

что с этим?

это символ варьируя (255) поле, и он установлен по умолчанию в нуль

как вопрос точки сборки столбца таблицы является

name varying character(255) DEFAULT(NULL) 

, так что я знаю, что ввод NULL и я уже сделал

SELECT * FROM <tbl> WHERE name IS NULL; и, конечно же, я возвращаю все строки NULL с именем a.name ... так что с этим связано?

+1

Что означает «не будет работать»? Что он возвращает и что вы ожидаете от него? – JNevill

+1

nullif(): Функция NULLIF возвращает нулевое значение, если value1 равно value2; иначе он возвращает value1.'. если 'a.name' равно null, DEFINITION не может быть равным или не равным' '' '. нулевое значение никогда не может быть равно никому, включая его. 'null' является ядовитым и делает большинство операций с ним также имеющими нулевые результаты. ваш nullif() будет работать только в том случае, если 'a.name' буквально является пустой строкой. –

+0

хорошо, потому что COALESCE тест для NULL, и я заменяю его на «непризнанный», он «не работает», потому что независимо от того, что он всегда возвращает NULL –

ответ

-1

ок ... всем отступали ответить мне:

COALESCE(NULLIF(e.name,''),'unassigned') IS NULL... 

Этот метод никогда не будет работать на возвращение «нет записей», и как это хранимая процедура, которая создает материализованное представление, где Я обрабатываю запросы через вложенные запросы, где в столбце может быть 0 (в качестве id по умолчанию id = other_id) вложенный запрос просто не будет возвращать строки. Когда строка не возвращается, функции COALESCE или NULLIF никогда не будут выполняться. Строка должна быть возвращена для того, чтобы эти функции воздействовали на значения строк ... Поскольку я никогда не слышал о таблице с автоинкрементным полем PK, начинающимся с 0 и обычно начиная с 1 в наборе результатов «нет возвращенные записи "всегда возвращают значение NULL в материализованный столбец представления.

Затем запрос, который я запускаю для опроса строк из этого материализованного представления, будет функционировать должным образом как COALESCE(etc etc), потому что теперь в этом столбце есть фактическое значение NULL.

Смежные вопросы