Re: Using CASE with a boolean value
| От | Tom Lane |
|---|---|
| Тема | Re: Using CASE with a boolean value |
| Дата | |
| Msg-id | 13268.1022264657@sss.pgh.pa.us обсуждение |
| Ответ на | Using CASE with a boolean value (Tom Ansley <tansley@law.du.edu>) |
| Ответы |
Re: Using CASE with a boolean value
|
| Список | pgsql-novice |
Tom Ansley <tansley@law.du.edu> writes:
> CASE booking.quiz
> WHEN booking.quiz=false THEN 'No'
> WHEN booking.quiz=true THEN 'Yes'
> ELSE 'No'
> END
You seem to be confused about the two forms of CASE. You can either
write boolean WHEN conditions or provide a value to be compared against
a series of alternative match values. What you have here is an unholy
mixture of both, which would never have been accepted at all if
booking.quiz had not chanced to be a boolean value. The system will
take it as (booking.quiz = (booking.quiz=false)), etc. I'm far too lazy
to work out the exact implications of that, but it's probably not what
you want.
I'd write a CASE on a boolean value like this:
CASE WHEN booking.quiz THEN 'Yes' ELSE 'No' END
or if I wanted to distinguish UNKNOWN (NULL) as
CASE booking.quiz
WHEN true THEN 'Yes'
WHEN false THEN 'No'
ELSE 'Unknown'
END
Or you could write it as
CASE
WHEN booking.quiz=true THEN 'Yes'
WHEN booking.quiz=false THEN 'No'
ELSE 'Unknown'
END
which is actually what the system will expand the previous example into.
But writing it out seems un-idiomatic to me. (I always look at 'boolean
= TRUE' kinds of tests as the mark of a beginner programmer who hasn't
quite absorbed the notion of a boolean value...)
regards, tom lane
В списке pgsql-novice по дате отправления: