Обсуждение: CAST(null as date)...

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

CAST(null as date)...

От
"Ian Harding"
Дата:
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
anyway 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



Re: CAST(null as date)...

От
Stephan Szabo
Дата:
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)



Re: CAST(null as date)...

От
"Ian Harding"
Дата:
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
wasenough.  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)




Re: CAST(null as date)...

От
Tom Lane
Дата:
"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

Re: CAST(null as date)...

От
"Ian Harding"
Дата:
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