Обсуждение: Re: isnull

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

Re: isnull

От
Joseph Shraibman
Дата:
Julie Hunt wrote:

> Sorry, I haven't come across ifnull

Ah, I think the documentation that came with 6.5.3 was wrong, because
http://www.postgresql.org/docs/postgres/functions.htm#AEN2257 has the function
nullif  where ifnull was in my documentation.  I don't get errors now, but it
just doesn't seem to do it's job.

playpen=> insert into tablea values (100, null);
INSERT 23168 1
playpen=> select * from tablea;
indexa|data
------+----    1|   1    2|   2    3|   2    4|   4    7|   7    6|   8    5|   8  100|
(8 rows)


playpen=> select *, data from tablea;
indexa|data|data
------+----+----    1|   1|   1    2|   2|   2    3|   2|   2    4|   4|   4    7|   7|   7    6|   8|   8    5|   8|
8 100|    |
 
(8 rows)

playpen=> select *, nullif(data, 9) from tablea;
indexa|data|case
------+----+----    1|   1|   1    2|   2|   2    3|   2|   2    4|   4|   4    7|   7|   7    6|   8|   8    5|   8|
8 100|    |
 
(8 rows)



>
> Julie
>
> >Oops, my mistake.  I meant ifnull.  Whenever I try to use ifnull I get an
> >error so I have to use a case when a = null then default else a end.
> >
> >Julie Hunt wrote:
> >
> >> There is a space between is and null: is null
> >>
> >> Regards
> >>
> >> Joseph Shraibman wrote:
> >>
> >> > Could someone give me an example of isnull?  Whenever I try it I get an
> >> > error message.
> >



Re: isnull

От
Julie Hunt
Дата:
Yes, you're right.  I remember attempting to do an outer left join using the
nullif but without success so I used the case function instead with success.
Maybe someone else knows more about nullif and why it doesn't seem to work.

Regards,
Julie

Joseph Shraibman wrote:

> Julie Hunt wrote:
>
> > Sorry, I haven't come across ifnull
>
> Ah, I think the documentation that came with 6.5.3 was wrong, because
> http://www.postgresql.org/docs/postgres/functions.htm#AEN2257 has the function
> nullif  where ifnull was in my documentation.  I don't get errors now, but it
> just doesn't seem to do it's job.
>
> playpen=> insert into tablea values (100, null);
> INSERT 23168 1
> playpen=> select * from tablea;
> indexa|data
> ------+----
>      1|   1
>      2|   2
>      3|   2
>      4|   4
>      7|   7
>      6|   8
>      5|   8
>    100|
> (8 rows)
>
> playpen=> select *, data from tablea;
> indexa|data|data
> ------+----+----
>      1|   1|   1
>      2|   2|   2
>      3|   2|   2
>      4|   4|   4
>      7|   7|   7
>      6|   8|   8
>      5|   8|   8
>    100|    |
> (8 rows)
>
> playpen=> select *, nullif(data, 9) from tablea;
> indexa|data|case
> ------+----+----
>      1|   1|   1
>      2|   2|   2
>      3|   2|   2
>      4|   4|   4
>      7|   7|   7
>      6|   8|   8
>      5|   8|   8
>    100|    |
> (8 rows)
>
> >
> > Julie
> >
> > >Oops, my mistake.  I meant ifnull.  Whenever I try to use ifnull I get an
> > >error so I have to use a case when a = null then default else a end.
> > >
> > >Julie Hunt wrote:
> > >
> > >> There is a space between is and null: is null
> > >>
> > >> Regards
> > >>
> > >> Joseph Shraibman wrote:
> > >>
> > >> > Could someone give me an example of isnull?  Whenever I try it I get an
> > >> > error message.
> > >



Re: isnull

От
Joseph Shraibman
Дата:
Julie Hunt wrote:

> Yes, you're right.  I remember attempting to do an outer left join using the
> nullif but without success so I used the case function instead with success.
> Maybe someone else knows more about nullif and why it doesn't seem to work.
>
> Regards,
> Julie
>

I've actually taken a closer look at the web page and not only did the name change,
but I now notice that they change what it is supposed to do as well.  It does work
as currently defined, but I needed something that does what the original
documentation said:

IFNULL(input,non-NULL substitute)return second argument if first is NULLExample:        IFNULL(c1, 'N/A')


>
> Joseph Shraibman wrote:
>
> > Julie Hunt wrote:
> >
> > > Sorry, I haven't come across ifnull
> >
> > Ah, I think the documentation that came with 6.5.3 was wrong, because
> > http://www.postgresql.org/docs/postgres/functions.htm#AEN2257 has the function
> > nullif  where ifnull was in my documentation.  I don't get errors now, but it
> > just doesn't seem to do it's job.
> >
> > playpen=> insert into tablea values (100, null);
> > INSERT 23168 1
> > playpen=> select * from tablea;
> > indexa|data
> > ------+----
> >      1|   1
> >      2|   2
> >      3|   2
> >      4|   4
> >      7|   7
> >      6|   8
> >      5|   8
> >    100|
> > (8 rows)
> >
> > playpen=> select *, data from tablea;
> > indexa|data|data
> > ------+----+----
> >      1|   1|   1
> >      2|   2|   2
> >      3|   2|   2
> >      4|   4|   4
> >      7|   7|   7
> >      6|   8|   8
> >      5|   8|   8
> >    100|    |
> > (8 rows)
> >
> > playpen=> select *, nullif(data, 9) from tablea;
> > indexa|data|case
> > ------+----+----
> >      1|   1|   1
> >      2|   2|   2
> >      3|   2|   2
> >      4|   4|   4
> >      7|   7|   7
> >      6|   8|   8
> >      5|   8|   8
> >    100|    |
> > (8 rows)
> >
> > >
> > > Julie
> > >
> > > >Oops, my mistake.  I meant ifnull.  Whenever I try to use ifnull I get an
> > > >error so I have to use a case when a = null then default else a end.
> > > >
> > > >Julie Hunt wrote:
> > > >
> > > >> There is a space between is and null: is null
> > > >>
> > > >> Regards
> > > >>
> > > >> Joseph Shraibman wrote:
> > > >>
> > > >> > Could someone give me an example of isnull?  Whenever I try it I get an
> > > >> > error message.
> > > >



Re: isnull

От
Tom Lane
Дата:
Joseph Shraibman <jks@p1.selectacast.net> writes:
> Ah, I think the documentation that came with 6.5.3 was wrong, because
> http://www.postgresql.org/docs/postgres/functions.htm#AEN2257 has the
> function nullif where ifnull was in my documentation.  I don't get
> errors now, but it just doesn't seem to do it's job.

NULLIF doesn't do what you seem to expect: it is for *creating* nulls,
not removing them.  It produces a null if the two arguments are equal,
else the first argument.

COALESCE is probably the thing you are after: it produces the first
nonnull value among its arguments, reading left to right.

There isn't anything called IFNULL in the SQL92 spec, though there
is an IS NULL test (note space).

No, I didn't choose these names ;-) ... blame the SQL92 authors ...
        regards, tom lane


Re: isnull

От
Julie Hunt
Дата:
Could you describe exactly what you are trying to achieve and the select statement
with the case you tried.

Joseph Shraibman wrote:

>
>
> I've actually taken a closer look at the web page and not only did the name change,
> but I now notice that they change what it is supposed to do as well.  It does work
> as currently defined, but I needed something that does what the original
> documentation said:
>
> IFNULL(input,non-NULL substitute)
>  return second argument if first is NULL
>  Example:        IFNULL(c1, 'N/A')



Re: isnull

От
Bruce Momjian
Дата:
> Julie Hunt wrote:
> 
> > Yes, you're right.  I remember attempting to do an outer left join using the
> > nullif but without success so I used the case function instead with success.
> > Maybe someone else knows more about nullif and why it doesn't seem to work.
> >
> > Regards,
> > Julie
> >
> 
> I've actually taken a closer look at the web page and not only did the name change,
> but I now notice that they change what it is supposed to do as well.  It does work
> as currently defined, but I needed something that does what the original
> documentation said:
> 
> IFNULL(input,non-NULL substitute)
>  return second argument if first is NULL
>  Example:        IFNULL(c1, 'N/A')
> 

New function is COALESCE.  It returns the first non-null argument.

--  Bruce Momjian                        |  http://www.op.net/~candle pgman@candle.pha.pa.us               |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026