Thread: настройка PostgresSQL для работы с NULL

настройка PostgresSQL для работы с NULL

From
Serik
Date:
Добрый день !

Можно настроить PostgreSQL, чтобы запрос

select 'test' || NULL || '' as ret;

возвращал не пустую строку, а то, что есть ?

--
С уважением,
 Serik


Re: настройк

From
Nick Gazaloff
Date:
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)


Re[2]: [pgsql-ru-general] настройк

From
Serik
Date:
Здравствуйте, 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


Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] настройк

From
Teodor Sigaev
Date:
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.

Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] настройк

From
Nick Gazaloff
Date:
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)