LIKE '%%' does not return NULL

Lists: pgsql-sql
From: "Traci Sumpter" <Traci(dot)Sumpter(at)opus(dot)co(dot)nz>
To: <pgsql-sql(at)postgresql(dot)org>
Subject: LIKE '%%' does not return NULL
Date: 2004-08-11 01:22:00
Message-ID: KFEJJKOAGCCGEJFLKCBBKEALEBAA.Traci.Sumpter@opus.co.nz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-sql

A team developer has chosen the lazy way of not checking if a variable
exists on his PHP page and has code which produces the following SQL

SELECT * FROM mytable where myfield ilike '%%'

I have noticed that this statement does not return null or empty myfield
records.

Is this the way (SQL) to do this??

Is there a better syntax to the SQL??

Is the better way to create the statement in PHP is to check if the passed
value <> '' ??

Or is this issue being fixed in the new V8 version of postgreSQL.


From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: Traci Sumpter <Traci(dot)Sumpter(at)opus(dot)co(dot)nz>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: LIKE '%%' does not return NULL
Date: 2004-08-15 18:56:07
Message-ID: 20040815115410.B86649@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-sql

On Wed, 11 Aug 2004, Traci Sumpter wrote:

> A team developer has chosen the lazy way of not checking if a variable
> exists on his PHP page and has code which produces the following SQL
>
> SELECT * FROM mytable where myfield ilike '%%'
>
> I have noticed that this statement does not return null or empty myfield
> records.

It should not return true for NULLs but should for empty fields (which it
does AFAICS).

If you want to get the NULLs as well you'll need to explicitly OR myfield
is NULL.


From: Frank Finner <postgresql(at)finner(dot)de>
To: "Traci Sumpter" <Traci(dot)Sumpter(at)opus(dot)co(dot)nz>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: LIKE '%%' does not return NULL
Date: 2004-08-15 19:17:49
Message-ID: 20040815211749.115a9f86.postgresql@finner.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-sql

Hi,

you should additionally check with IS NULL:

SELECT * FROM mytable where myfield like '%%' OR myfield IS NULL

if you want to get fields containing NULL as well. A field containing "NULL" in
fact contains nothing, not even an empty string, so you cannot catch it with
"%".

BTW, this holds true especially for booleans: They can contain the values "true"
or "false" or no value at all, which means, they contain "NULL" and are in fact
undefined. You won´t catch them with something like "SELECT * FROM bla where
blubb <> false", you will only get the fields containing true, not the NULLs.

Regards, Frank.

On Wed, 11 Aug 2004 13:22:00 +1200 "Traci Sumpter" <Traci(dot)Sumpter(at)opus(dot)co(dot)nz>
sat down, thought long and then wrote:

> A team developer has chosen the lazy way of not checking if a variable
> exists on his PHP page and has code which produces the following SQL
>
> SELECT * FROM mytable where myfield ilike '%%'
>
> I have noticed that this statement does not return null or empty myfield
> records.
>
> Is this the way (SQL) to do this??
>
> Is there a better syntax to the SQL??
>
> Is the better way to create the statement in PHP is to check if the passed
> value <> '' ??
>
> Or is this issue being fixed in the new V8 version of postgreSQL.
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo(at)postgresql(dot)org