Обсуждение: Concatenating not working properly

Поиск
Список
Период
Сортировка

Concatenating not working properly

От
Michal Taborsky
Дата:
Hello,

I am facing a problem I cannot really explain to myself. I have a table 
with personal data which has columns surname, firstname, secondname, 
title and I want to do a simple select like this:

SELECT (surname || ', ' || firstname || ' ' || secondname) as fullname 
FROM person

For some rows (from what I recognised it is with rows, which have the 
title column empty) it works, for some it returns empty string:

akcent=# SELECT (surname || ', ' || firstname || ' ' || secondname) as 
fullname, title_pre, surname, firstname, secondname FROM person;
       fullname        | title_pre | surname  | firstname | secondname
-----------------------+-----------+----------+-----------+------------                       | Ing.      | Taborsky |
Michal   |                       | Ing.      | Barta    | David     | Novak, Josef          |           | Novak    |
Josef    | Saroch, Adrian Walter |           | Saroch   | Adrian    | Walter
 
(4 rows)

Is that a bug or am I missing something ?

Thanks,
Michal



Re: Concatenating not working properly

От
Tomasz Myrta
Дата:
Uz.ytkownik Michal Taborsky napisa?:
> Hello,
>
> I am facing a problem I cannot really explain to myself. I have a table
> with personal data which has columns surname, firstname, secondname,
> title and I want to do a simple select like this:
>
> SELECT (surname || ', ' || firstname || ' ' || secondname) as fullname
> FROM person
>
> For some rows (from what I recognised it is with rows, which have the
> title column empty) it works, for some it returns empty string:
>
> akcent=# SELECT (surname || ', ' || firstname || ' ' || secondname) as
> fullname, title_pre, surname, firstname, secondname FROM person;
>
>        fullname        | title_pre | surname  | firstname | secondname
> -----------------------+-----------+----------+-----------+------------
>                        | Ing.      | Taborsky | Michal    |
>                        | Ing.      | Barta    | David     |
>  Novak, Josef          |           | Novak    | Josef     |
>  Saroch, Adrian Walter |           | Saroch   | Adrian    | Walter
> (4 rows)
>
> Is that a bug or am I missing something ?
>
> Thanks,
> Michal
It works as it should.

If you want to add null values, use:
SELECT coalesce(surname,'') || ', ' || coalesce(firstname,'') || ' ' ||
coalesce(secondname,'') as fullname> FROM person

Remember - NULL value means that value doesn't exist, so you can't add
"not existence" to other existing values.

Regards,
Tomasz Myrta



Re: Concatenating not working properly

От
Joe Conway
Дата:
Michal Taborsky wrote:
> akcent=# SELECT (surname || ', ' || firstname || ' ' || secondname) as 
> fullname, title_pre, surname, firstname, secondname FROM person;
> 
>        fullname        | title_pre | surname  | firstname | secondname
> -----------------------+-----------+----------+-----------+------------
>                        | Ing.      | Taborsky | Michal    |
>                        | Ing.      | Barta    | David     |
>  Novak, Josef          |           | Novak    | Josef     |
>  Saroch, Adrian Walter |           | Saroch   | Adrian    | Walter
> (4 rows)
> 
> Is that a bug or am I missing something ?
> 

Try this:
SELECT (surname || ', ' || firstname || ' ' || secondname) as fullname,  title_pre, surname, firstname, secondname IS
NULLFROM person;
 

You'll find that when secondname is null, so is fullname. Instead of 
your original query, do (untested):

SELECT (surname || ', ' || firstname || ' ' || COALESCE(secondname, '')) as fullname, title_pre, surname, firstname,
secondnameFROM person;
 


HTH,

Joe