Re: Differentiate Between Zero-Length String and NULLColumn Values
| От | BillR |
|---|---|
| Тема | Re: Differentiate Between Zero-Length String and NULLColumn Values |
| Дата | |
| Msg-id | 45C0F97B.4080104@williamrosmus.com обсуждение исходный текст |
| Ответ на | Re: Differentiate Between Zero-Length String and NULLColumn Values (Peter Eisentraut <peter_e@gmx.net>) |
| Список | pgsql-sql |
Peter Eisentraut wrote:
> D'Arcy J.M. Cain wrote:
>
>> SELECT * FROM table WHERE column IS NULL;
>> SELECT * FROM table WHERE column = NULL;
>>
>> The latter violates the SQL spec and is not allowed by PostgreSQL
>> without setting a special flag.
>>
>
> It doesn't violate any spec and it's certainly allowed by PostgreSQL
> without any flags. It's just that the result is not what some people
> expect.
>
>
"= NULL" violates the SQL-92 Specification. Relevant section posted below.
Additionally *none of the example code* in the SQL-92 specification
document uses the expression "WHERE #value# = NULL"
*All* the example code in the specification use the expression as:
"WHERE #value# IS NULL"
8.6 <null predicate>
Function
Specify a test for a null value.
Format
<null predicate> ::= <row value constructor> IS [ NOT ] NULL
Syntax Rules
None.
Access Rules
None.
General Rules
1) Let R be the value of the <row value constructor>.
2) If all the values in R are the null value, then "R IS NULL" is true; otherwise, it is false.
3) If none of the values in R are the null value, then "R IS NOT NULL" is true; otherwise, it is
false.
Note: For all R, "R IS NOT NULL" has the same result as "NOT R IS NULL" if and only if R is of
degree1. Table 12, "<null predicate> semantics", specifies this behavior.
________________Table_12-<null_predicate>_semantics________________
R IS R IS NOT NOT R IS NOT R IS NOT
_Expression_______NULL____NULL__________NULL__________NULL_________
| degree 1: null | true | false | false | true | | | |
| | | | degree 1: not | false | true | true | false | null
| degree > 1: | true | false | false | true | | all null | |
| | | | | | | | | | degree
>1: | false | false | true | true | | some null | | | |
| | | | | | | | degree > 1: | false
|true | true | false | |_none_null______|_______|_____________|____________|______________|
| | | | | | |Leveling Rules | | |
| | | | | | | | 218
DatabaseLanguage SQL
В списке pgsql-sql по дате отправления: