输出"是/否"而不是PostgreSQL的Boolean数据类型的"T/F"[英] Output "yes/no" instead of "t/f" for boolean data type in PostgreSQL

本文是小编为大家收集整理的关于输出"是/否"而不是PostgreSQL的Boolean数据类型的"T/F"的处理方法,想解了输出"是/否"而不是PostgreSQL的Boolean数据类型的"T/F"的问题怎么解决?输出"是/否"而不是PostgreSQL的Boolean数据类型的"T/F"问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

如何使查询返回yes/no而不是t/f(true/false)?

电流解决方案是:

SELECT credit_card_holders.token IS NOT NULL AS premium

我找到了一个Ruby解决方案: rails(或ruby):是/否而不是真/假

但如果可能的话,在PostgreSQL中宁愿做到.

推荐答案

结束了:

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

其他推荐答案

通过创建自定义类型,您还可以实现此操作,请参阅以下示例

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

我们有以下数据

id xid 
-- --- 
1  2   
2  3   

和以下select语句返回布尔值.

select exists(select * from foo where xid=4);

exists
boolean
------
f

select exists(select * from foo where xid=3);

exists
boolean
------
t
好的,现在我们需要返回YES和NO而不是t和f,因此我们可以创建一个如下所示的自定义类型
create type bool2yesno as enum ('YES','NO'); --or whatever you want 'yes','no'.

并创建一个函数,将布尔转换为创建的自定义类型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 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

其他推荐答案

在真/假的情况下最直接的方式足够好:

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

至少它比T/F更可读!

本文地址:https://www.itbaoku.cn/post/1763890.html