Thread: IS NULL seems to return false, even when parameter is NULL
I have a strange problem with the following condition in a SELECT: AND (("TableData" = "inDate") OR ("inDate" IS NULL)) it works perfectly when the input date in the function (inDate) matchs a date in the table, but it does not work when the parameter inDate is NULL. I recall the function with pgadmin writing NULL as paramater. It seems that ("inDate" IS NULL) never returns true, even when the parameter is null... What's wrong? Lucazeo
Lucazeo <lucazeo@katamail.com> writes: > It seems that ("inDate" IS NULL) never returns true, even when the > parameter is null... Exceedingly unlikely. > What's wrong? You have not provided enough context for anyone to guess. regards, tom lane
>I have a strange problem with the following condition in a SELECT: > AND (("TableData" = "inDate") OR ("inDate" IS NULL)) > > it works perfectly when the input date in the function (inDate) matchs > a date in the table, but it does not work when the parameter inDate is > NULL. > I recall the function with pgadmin writing NULL as paramater. > It seems that ("inDate" IS NULL) never returns true, even when the > parameter is null... > What's wrong? Order is wrong, change it to > AND (("inDate" IS NULL) OR ("TableData" = "inDate") ) PostgreSQL OR is not commutative if left operand evaluates to NULL. Andrus.
Andrus wrote: >> I have a strange problem with the following condition in a SELECT: >> AND (("TableData" = "inDate") OR ("inDate" IS NULL)) >> >> it works perfectly when the input date in the function (inDate) matchs >> a date in the table, but it does not work when the parameter inDate is >> NULL. >> I recall the function with pgadmin writing NULL as paramater. >> It seems that ("inDate" IS NULL) never returns true, even when the >> parameter is null... >> What's wrong? > > Order is wrong, change it to >> AND (("inDate" IS NULL) OR ("TableData" = "inDate") ) > > PostgreSQL OR is not commutative if left operand evaluates to NULL. Seems to work here: select (true or null) as a, (null or true) as b, (null or false) as c, (false or null) as d; a | b | c | d ---+---+---+--- t | t | | (1 row) -- Richard Huxton Archonet Ltd
Richard, > Seems to work here: > > select (true or null) as a, (null or true) as b, (null or false) as c, > (false or null) as d; > a | b | c | d > ---+---+---+--- > t | t | | > (1 row) I'm sorry for the wrong information. Andrus.
"Andrus" <kobruleht2@hot.ee> writes: > PostgreSQL OR is not commutative if left operand evaluates to NULL. This is nonsense. regards, tom lane