Thread: Text concat problem
Hi: Have this curious situation and would like some help from you: Create an employee table: CREATE TABLE employee( id_employee SERIAL PRIMARY KEY, sex CHAR(1) DEFAULT 'm' CHECK(sex = 'f' OR sex = 'm'), start_dateDATE NOT NULL, charge VARCHAR(50) NOT NULL, last_name VARCHAR(50), first_name VARCHAR(50) NOT NULL, title VARCHAR(10)NOT NULL ); then fill it with a few values: insert into employee(title,first_name,start_date,charge) values('Mr. X','Smith',date(now()),'None'); insert into employee(title,first_name,start_date,charge) values('Mr. Y','Smith',date(now()),'None'); insert into employee(title,first_name,start_date,charge) values('Mr. Z','Smith',date(now()),'None'); so far there is no problem at all, the problem comes here: select title || ' ' || first_name || ' ' || last_name as fullname from employee; fullname ---------------- (3 rows) Doesn't work !!!!, I'm thinking it is because of the null value in last_name. Have any idea or suggestion on how to workaroundthis situation. Thank you. -- Luis Magaña Gnovus Networks & Software www.gnovus.com Tel. +52 (7) 4422425 joe666@gnovus.com
Luis Magaña wrote: > > Hi: > > Have this curious situation and would like some help from you: > > Create an employee table: > > CREATE TABLE employee( > id_employee SERIAL PRIMARY KEY, > sex CHAR(1) DEFAULT 'm' CHECK(sex = 'f' OR sex = 'm'), > start_date DATE NOT NULL, > charge VARCHAR(50) NOT NULL, > last_name VARCHAR(50), > first_name VARCHAR(50) NOT NULL, > title VARCHAR(10) NOT NULL > ); > > then fill it with a few values: > > insert into employee(title,first_name,start_date,charge) values('Mr. X','Smith',date(now()),'None'); > insert into employee(title,first_name,start_date,charge) values('Mr. Y','Smith',date(now()),'None'); > insert into employee(title,first_name,start_date,charge) values('Mr. Z','Smith',date(now()),'None'); > > so far there is no problem at all, the problem comes here: > > select title || ' ' || first_name || ' ' || last_name as fullname from employee; > > fullname > ---------------- > > > > (3 rows) > > Doesn't work !!!!, I'm thinking it is because of the null value in last_name. Have any idea or suggestion on how to workaroundthis situation. Yup.. it's due to the null.. I believe that the coalesce function can get you out of this... Speaking of which, why isn't it called NVL()? http://www.postgresql.org/users-lounge/docs/7.0/user/functions.htm Try this (untested): select coalesce(title, ''::varchar) || ' ' || coalesce(first_name, ''::varchar) || ' ' || coalesce(last_name, ''::varchar) as fullname from employee;
Rod Taylor <rbt@zort.on.ca> writes: > I believe that the coalesce function can > get you out of this... Speaking of which, why isn't it called NVL()? Because the SQL92 standard calls it coalesce. regards, tom lane
That would be an extreamly good reason then. I suppose I've fallen into the 'other' standard :( Tom Lane wrote: > > Rod Taylor <rbt@zort.on.ca> writes: > > I believe that the coalesce function can > > get you out of this... Speaking of which, why isn't it called NVL()? > > Because the SQL92 standard calls it coalesce. > > regards, tom lane
At 05:47 PM 11/8/00 -0600, Luis Magaña wrote: >insert into employee(title,first_name,start_date,charge) values('Mr. X','Smith',date(now()),'None'); >insert into employee(title,first_name,start_date,charge) values('Mr. Y','Smith',date(now()),'None'); >insert into employee(title,first_name,start_date,charge) values('Mr. Z','Smith',date(now()),'None'); > >so far there is no problem at all, the problem comes here: > >select title || ' ' || first_name || ' ' || last_name as fullname from employee; > > fullname >---------------- > > > > (3 rows) > >Doesn't work !!!!, I'm thinking it is because of the null value in last_name. Right. NULL means "has no value", it's not the empty string. The result of concatenating with NULL is NULL. > Have any idea or suggestion on how to workaround this situation. It's a classic NULL issue. 1+NULL = NULL, too, for instance. Try something like "default ''" in your table definition rather than use null. Then you'll be using the empty string for concatenation. 'abc' || NULL = NULL. 'abc' || '' = 'abc' which appears to be what you want. This is standard SQL92 behavior... - Don Baccus, Portland OR <dhogaza@pacifier.com> Nature photos, on-line guides, Pacific Northwest Rare Bird Alert Serviceand other goodies at http://donb.photo.net.