Вопрос:
Как сделать запрос, который вернет yes/no вместо t/f (true/false)?
Текущее решение:
SELECT credit_card_holders.token IS NOT NULL AS premium
Я нашел решение Ruby:
Rails (или Ruby): Да/Нет вместо True/False
Но скорее сделайте это в PostgreSQL, если это возможно.
Ответ №1
Закончено с этим:
(case when credit_card_holders.token IS NOT NULL then ‘Yes’ else ‘No’ end) AS premium Ответ №2
создавая настраиваемые типы, вы также можете это сделать, см. следующий пример
create table foo (id int,xid int); insert into foo values (1,2),(2,3);
мы имеем следующие данные
id xid — — 1 2 2 3
и следующие операторы select возвращают значение boolean.
select exists(select * from foo where xid=4); exists boolean —— f select exists(select * from foo where xid=3); exists boolean —— t
ok теперь нам нужно вернуть YES и NO вместо t и f, поэтому мы можем создать настраиваемый тип, например ниже
create type bool2yesno as enum (‘YES’,’NO’); —or whatever you want ‘yes’,’no’.
и создать функцию для преобразования boolean в созданный пользовательский тип i.e 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 $$;
теперь создайте cast для вновь созданного типа
create cast (boolean as bool2yesno ) with function convert_bool_to_bool2yesno(boolean) as assignment;
теперь снова попробуйте оператор select
select exists(select * from foo where xid=4)::bool2yesno ; exists bool2yesno ———- NO select exists(select * from foo where xid=3)::bool2yesno ; exists bool2yesno ———- YES
Справка:
СОЗДАТЬ ТИП
CREATE CAST
CREATE FUNCTION
Ответ №3
Самый простой способ в случае, если true/false достаточно хорош:
SELECT (credit_card_holders.token IS NOT NULL)::text AS premium
По крайней мере, это более читаемо, чем t/f!
Ответ №4
С помощью этого драгоценного камня humanize_boolean вы можете сделать это
true.humanize # => «Yes»
false.humanize # => «No»