2013-04-22 15 views
5

Ich bevorzuge 1/0 anstelle von t/f, also was soll ich verwenden, wenn ich boolean in integer umwandle?PostgreSQL boolean cast (0 als false)

select coalesce((null::boolean)::int, 0) 

ODER

select case null::boolean when 't' then 1 else 0 end 

... etwas anderes?

Antwort

12

Unabhängig davon, was Sie tun, ist eine boolesche Null nicht gleich falsch, genauso wenig wie eine numerische Null gleich null ist.

Versuchen:

Cast(col1 as integer) 

Wenn Sie wirklich null als falsch behandeln wollte dann:

case when col1 then 1 else 0 end 

es eine schlechte Sache sein würde, obwohl

+0

Ja, natürlich; es ist nur so, dass meine Modelllogik eventuelle Nullen für falsch hält. Übrigens, gibt es einen Unterschied zwischen Cast-Funktion und Col1 :: Int? –

+0

"Die CAST-Syntax entspricht SQL; die Syntax mit :: ist historische PostgreSQL-Nutzung" http://www.postgresql.org/docs/9.2/static/sql-expressions.html –

+0

@ mpapec, dass wäre eine Frage der Reue und darüber nachzudenken, wie du in einen solchen Zustand gelangt bist. Nun könnte es sein, dass Nullen völlig angemessen sind, was eine ganz andere Sache ist. Bei meinem Punkt war genau das Null <> falsch –