Salida "sí / no" en lugar de "t / f" para tipo de datos booleans en PostgreSQL

¿Cómo hago una consulta que devolvería yes/no lugar de t/f (verdadero / falso)?

La solución actual es:

 SELECT cnetworkingit_card_holders.token IS NOT NULL AS premium 

Encontré una solución de Ruby: Rieles (o Ruby): Sí / No en lugar de Verdadero / Falso

Pero preferiría hacerlo en PostgreSQL si es posible.

Terminó con esto:

 (case when cnetworkingit_card_holders.token IS NOT NULL then 'Yes' else 'No' end) AS premium 

creando types personalizados también puede lograr esto, vea el siguiente ejemplo

 create table foo (id int,xid int); insert into foo values (1,2),(2,3); 

tenemos los siguientes datos

 id xid -- --- 1 2 2 3 

y las siguientes declaraciones de selección devuelven el valor boolean.

 select exists(select * from foo where xid=4); exists boolean ------ f select exists(select * from foo where xid=3); exists boolean ------ t 

ok ahora tenemos que devolver YES y NO lugar de t y f , así que podemos crear un tipo personalizado como debajo

 create type bool2yesno as enum ('YES','NO'); --or whatever you want 'yes','no'. 

y crea una function para convertir boolean al tipo personalizado creado, es decir, bool2yesno

 create function convert_bool_to_bool2yesno(boolean) returns bool2yesno immutable strict language sql as $func$ select case $1 when false then 'NO'::bool2yesno when true then 'YES'::bool2yesno end $$; 

ahora crea un cast para el tipo creado recientemente

 create cast (boolean as bool2yesno ) with function convert_bool_to_bool2yesno(boolean) as assignment; 

Ahora otra vez intente la statement selecta

 select exists(select * from foo where xid=4)::bool2yesno ; exists bool2yesno ---------- NO select exists(select * from foo where xid=3)::bool2yesno ; exists bool2yesno ---------- YES 

Referencia:
CREAR TIPO
CREAR CAST
CREAR FUNCIÓN

La manera más directa en caso de que sea verdadera / falsa es suficiente:

 SELECT (cnetworkingit_card_holders.token IS NOT NULL)::text AS premium 

¡Al less es más legible que t / f!

Con esta gem humanize_boolean puedes hacerlo

true.humanize # => "Yes" false.humanize # => "No"