Thread: настройка PostgresSQL для работы с NULL
Добрый день ! Можно настроить PostgreSQL, чтобы запрос select 'test' || NULL || '' as ret; возвращал не пустую строку, а то, что есть ? -- С уважением, Serik
Serik wrote: > Добрый день ! > > Можно настроить PostgreSQL, чтобы запрос > > select 'test' || NULL || '' as ret; > > возвращал не пустую строку, а то, что есть ? Имманентным свойством NULL является "распространяемость" через выражения, то есть, любые выражения с NULL возвращают NULL. Если вы хотите иначе -- то это будет уже не NULL, а что-то другое. Пустая строка, например. Попробуйте сначала заменять NULL на пустую строку. Вообще хорошо бы получше сформулировать задачу. -- С уважением, технический директор ООО "ЦСА" Николай Газалов http://www.sbin.org sip:nick@sbin.org +7 8793 365584 (GPG Key ID: 4396B2D0)
Здравствуйте, Nick. Вы писали 6 декабря 2005 г., 2:58:47: NG> Serik wrote: >> Добрый день ! >> >> Можно настроить PostgreSQL, чтобы запрос >> >> select 'test' || NULL || '' as ret; >> >> возвращал не пустую строку, а то, что есть ? NG> Имманентным свойством NULL является "распространяемость" через NG> выражения, то есть, любые выражения с NULL возвращают NULL. Если вы NG> хотите иначе -- то это будет уже не NULL, а что-то другое. Пустая NG> строка, например. Попробуйте сначала заменять NULL на пустую строку. NG> Вообще хорошо бы получше сформулировать задачу. Спасибо за ответ. Задача совершенно простая, в таблице есть поля "фамилия", "имя", "отчество". Я хочу чтобы запрос возвратил мне одно поле "Фамилия И.О.", а отчество может быть NULL, и соответственно возвращается пустая строка. Стандартной функции на проверку строки на NULL, и замену на "" не нашел. Написать свою ? -- С уважением, Serik
select 'test' || coalesce(NULL, '') || '' as ret; Serik wrote: > Здравствуйте, Nick. > > Вы писали 6 декабря 2005 г., 2:58:47: > > NG> Serik wrote: > >>>Добрый день ! >>> >>>Можно настроить PostgreSQL, чтобы запрос >>> >>>select 'test' || NULL || '' as ret; >>> >>>возвращал не пустую строку, а то, что есть ? > > > NG> Имманентным свойством NULL является "распространяемость" через > NG> выражения, то есть, любые выражения с NULL возвращают NULL. Если вы > NG> хотите иначе -- то это будет уже не NULL, а что-то другое. Пустая > NG> строка, например. Попробуйте сначала заменять NULL на пустую строку. > NG> Вообще хорошо бы получше сформулировать задачу. > > Спасибо за ответ. > Задача совершенно простая, в таблице есть поля "фамилия", "имя", > "отчество". > Я хочу чтобы запрос возвратил мне одно поле "Фамилия И.О.", а > отчество может быть NULL, и соответственно возвращается пустая строка. > > Стандартной функции на проверку строки на NULL, и замену на "" не > нашел. Написать свою ? > -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] настройк
From
"Andrey N. Oktyabrski"
Date:
Teodor Sigaev wrote: > select 'test' || coalesce(NULL, '') || '' as ret; >>>> Можно настроить PostgreSQL, чтобы запрос >>>> select 'test' || NULL || '' as ret; >>>> возвращал не пустую строку, а то, что есть ? >> >> Задача совершенно простая, в таблице есть поля "фамилия", "имя", >> "отчество". >> Я хочу чтобы запрос возвратил мне одно поле "Фамилия И.О.", а >> отчество может быть NULL, и соответственно возвращается пустая строка. >> >> Стандартной функции на проверку строки на NULL, и замену на "" не >> нашел. Написать свою ? file:///usr/local/share/doc/postgresql/html/functions-conditional.html#AEN12614 9.13.2. COALESCE COALESCE(value [, ...]) The COALESCE function returns the first of its arguments that is not null. Null is returned only if all arguments are null. This is often useful to substitute a default value for null values when data is retrieved for display, for example: SELECT COALESCE(description, short_description, '(none)') ... Like a CASE expression, COALESCE will not evaluate arguments that are not needed to determine the result; that is, arguments to the right of the first non-null argument are not evaluated.
Serik wrote: > Здравствуйте, Nick. > > Вы писали 6 декабря 2005 г., 2:58:47: > > NG> Serik wrote: > >>>Добрый день ! >>> >>>Можно настроить PostgreSQL, чтобы запрос >>> >>>select 'test' || NULL || '' as ret; >>> >>>возвращал не пустую строку, а то, что есть ? > > > NG> Имманентным свойством NULL является "распространяемость" через > NG> выражения, то есть, любые выражения с NULL возвращают NULL. Если вы > NG> хотите иначе -- то это будет уже не NULL, а что-то другое. Пустая > NG> строка, например. Попробуйте сначала заменять NULL на пустую строку. > NG> Вообще хорошо бы получше сформулировать задачу. > > Спасибо за ответ. > Задача совершенно простая, в таблице есть поля "фамилия", "имя", > "отчество". > Я хочу чтобы запрос возвратил мне одно поле "Фамилия И.О.", а > отчество может быть NULL, и соответственно возвращается пустая строка. > > Стандартной функции на проверку строки на NULL, и замену на "" не > нашел. Написать свою ? > Упрощенно: lastname || ' ' || firstname || COALESCE(secondname, ''); -- С уважением, технический директор ООО "ЦСА" Николай Газалов http://www.sbin.org sip:nick@sbin.org +7 8793 365584 (GPG Key ID: 4396B2D0)