CAST(null as date)...

Started by Ian Hardingalmost 24 years ago5 messagesgeneral
Jump to latest
#1Ian Harding
ianh@tpchd.org

I tried to create a function to return the string 'null' (without quotes, of course...) if the input was a zero length string, so I could use it in casting arguments to another function such as:

select myfunction(cast(nullifzls($maybeemptyvar) as date), cast(....));

However I have this dilemma. The return type from the nullifzls function is text. Text blows up the cast. Is there any way to make this work, or should I do something else?

plantest=# select cast(null as date);
?column?
----------

(1 row)

plantest=# select nullifzls('');
nullifzls
---------------
null
(1 row)

plantest=# select cast(nullifzls('') as date);
ERROR: Bad date external representation 'null'

plantest=# select cast(cast('null' as text) as date);
ERROR: Bad date external representation 'null'

Thanks...

Ian

#2Stephan Szabo
sszabo@megazone23.bigpanda.com
In reply to: Ian Harding (#1)
Re: CAST(null as date)...

On Tue, 18 Jun 2002, Ian Harding wrote:

I tried to create a function to return the string 'null' (without
quotes, of course...) if the input was a zero length string, so I
could use it in casting arguments to another function such as:

select myfunction(cast(nullifzls($maybeemptyvar) as date),
cast(....));

However I have this dilemma. The return type from the nullifzls
function is text. Text blows up the cast. Is there any way to make
this work, or should I do something else?

Wouldn't you want the function to return NULL, not 'null' since
the latter is a perfectly happily defined string containing the
word null? ;)

create function ff(text) returns text as 'select case when $1 = '''' then
cast(NULL as text) else $1 end;' language 'sql';

sszabo=# select ff('');
ff
----

(1 row)

sszabo=# select cast (ff('') as date);
ff
----

(1 row)

sszabo=# select cast (ff('') as date) is NULL;
?column?
----------
t
(1 row)

#3Ian Harding
ianh@tpchd.org
In reply to: Stephan Szabo (#2)
Re: CAST(null as date)...

That does, indeed work! However, mine looked more like this....

creat function nullifzls(text) returns text as '
if {[string length $1] == 0} {
return NULL
} else {
return $1
}
' language 'pltcl';

It doesn't work. I don't do the explicit cast before returning the value, but I thought defining the return datatype was enough. It seems to show up as text...

BTW, it's no big deal, I just replaced it with:

case when length($foo) = 0 then NULL else ''$foo'' end

Stephan Szabo <sszabo@megazone23.bigpanda.com> 06/18/02 04:13PM >>>

On Tue, 18 Jun 2002, Ian Harding wrote:

I tried to create a function to return the string 'null' (without
quotes, of course...) if the input was a zero length string, so I
could use it in casting arguments to another function such as:

select myfunction(cast(nullifzls($maybeemptyvar) as date),
cast(....));

However I have this dilemma. The return type from the nullifzls
function is text. Text blows up the cast. Is there any way to make
this work, or should I do something else?

Wouldn't you want the function to return NULL, not 'null' since
the latter is a perfectly happily defined string containing the
word null? ;)

create function ff(text) returns text as 'select case when $1 = '''' then
cast(NULL as text) else $1 end;' language 'sql';

sszabo=# select ff('');
ff
----

(1 row)

sszabo=# select cast (ff('') as date);
ff
----

(1 row)

sszabo=# select cast (ff('') as date) is NULL;
?column?
----------
t
(1 row)

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ian Harding (#3)
Re: CAST(null as date)...

"Ian Harding" <ianh@tpchd.org> writes:

creat function nullifzls(text) returns text as '
if {[string length $1] == 0} {
return NULL
} else {
return $1
}
' language 'pltcl';

Try return_null

regards, tom lane

#5Ian Harding
ianh@tpchd.org
In reply to: Tom Lane (#4)
Re: CAST(null as date)...

Argh! I have a dog-eared copy of that page of the docs that I printed on 5/11/01. Time to print a new one!!

Thanks!

Ian A. Harding
Programmer/Analyst II
Tacoma-Pierce County Health Department
(253) 798-3549
mailto: iharding@tpchd.org

We have only two things to worry about: That things will never get
back to normal, and that they already have.

Tom Lane <tgl@sss.pgh.pa.us> 06/19/02 05:57AM >>>

"Ian Harding" <ianh@tpchd.org> writes:

creat function nullifzls(text) returns text as '
if {[string length $1] == 0} {
return NULL
} else {
return $1
}
' language 'pltcl';

Try return_null

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly