¿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"