RE: [SQL] Trouble with null text fields

From: Michael Davis <michael(dot)davis(at)tvguide(dot)com>
To: "'Glenn Waldron'" <gwaldron(at)wareonearth(dot)com>, pgsql-sql(at)postgreSQL(dot)org
Subject: RE: [SQL] Trouble with null text fields
Date: 1999-04-13 15:48:33
Message-ID: 93C04F1F5173D211A27900105AA8FCFC145390@lambic.prevuenet.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Try this:

DROP FUNCTION nz(text);
CREATE FUNCTION nz (text) RETURNS text AS '
BEGIN
if ($1 is NULL) then
return '''';
else
return $1;
end if;
END; ' LANGUAGE 'plpgsql';

SELECT (nz(field_one) || nz(field_two)) from t1;

This has worked for me. It is a little slow.

-----Original Message-----
From: Glenn Waldron [SMTP:gwaldron(at)wareonearth(dot)com]
Sent: Tuesday, April 13, 1999 9:26 AM
To: pgsql-sql(at)postgreSQL(dot)org
Subject: [SQL] Trouble with null text fields

Using Postgres 6.5 beta (snap 12 apr), on Linux i386. I moved up
from
6.4.2 when I couldn't get things working.

I'm having difficulty dealing with null text/varchar fields. I need
to be able to interpret null values as the null string '' for the
purposes on concatenation.

1) ----
For example, the query:

SELECT (field_one || field_two) from t1;

Will return the concatenation of the two fields. If either of the
fields
is null, it is interpreted as the empty string '' and the correct
answer
is printed. But:

SELECT * from t1 where ( field_one || field_two = 'something' )

This does NOT work is either field_one or field_two is null. Same
result
with the textcat() function.

2) ----
Next I tried using "case", getting a parse error at or near "then":

SELECT ( case field_one when null then '' else field_one end )
from t1;

This one gave me "ERROR: copyObject: don't know how to copy 704":

SELECT ( case field_one when 'string' then 'other' else 'third'
end)
from t1;

3) ---
I tried writing a function that takes a "text" type and returns ''
is the
string
is null. Never could successfully do a null test on a function
parameter.

4) ----
I also tried writing my own concat function, and found that passing
null fields into a user function doesn't seem to work either. So I
tried
passing the whole thing in as a TUPLE, since you can determine
whether a
field is null with the GetAttributeByName() call.

The creation:

CREATE FUNCTION mycat(text,text) returns text as
'/usr/.../file.so'
langauge 'sql';

This worked great, even with null values:

SELECT mycat(field_one, field_two) from t1;

This crashed the backend, with a "Memory exhauted in
AllocSetAlloc()" error:

SELECT * from t1 where mycat(field_one, field_two) =
'something';

So I tried making an index, and got: "DefineIndex(): Attibute t1
not found"

CREATE INDEX t1_ix on t1 ( mycat(t1) text_ops );

Any help is appreciated!! Sorry for the novel!! -glenn

Browse pgsql-sql by date

  From Date Subject
Next Message Michael Davis 1999-04-13 16:01:34 RE: [SQL] Trouble with null text fields
Previous Message Tom Lane 1999-04-13 15:37:43 Re: [SQL] subqueries