表示三元sql数据类型

j8yoct9x  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(297)

上下文

我刚刚在postgresql数据库中遇到一个表,它实际上只定义了一个编码值的三元组,作为三元数据类型在整个数据库中使用。乍一看我有点吃惊,我觉得很奇怪;应该有一些三元数据类型吗?
我搜索过网络,尤其是postgresql文档,但没有任何明显的成功(我的搜索关键字可能错了?!),但也许没有其他解决办法。

问题

我想知道在postgresql中是否存在三元(与二进制或布尔型相比)数据类型,或者更普遍地说,在sql中是否存在允许表示“三元状态”(或“三元布尔型”,这显然是对语言的滥用)的数据类型,我将其作为一个总体想法来表示为:

+-------+----------+--------------------+
| id    |     type |  also expressed as |
+-------+----------+--------------------+
| 0     |    false |                  0 |
| 1     |     true |                  1 |
| 2     |  unknown |                  2 |
+-------+----------+--------------------+

哪里 unknown 可以是你实际处理的任何第三种状态。

vbkedwbf

vbkedwbf1#

我想知道它是否存在三元(与二进制或布尔值比较)数据类型
事实上 boolean 数据类型是三元的,因为它可以有 true , false 以及 null .
考虑下这张表:

create table data (some_number int, some_flag boolean);

以及以下数据:

insert into data (some_number, some_flag)
values (1, true), (2, false), (3, null);

然后是以下内容:

select *
from data
where some_flag = false;

将只返回一行(其中一些\u数=2)

rjee0c15

rjee0c152#

there is not a  specific ternary operator but you could use case  

   select case when operator =0 then 'false'
                when operatore =1 then 'true'
                when operator = 2 then 'unknow'
                else 'not managed'
              end 
  from your_table
mrwjdhj3

mrwjdhj33#

对于您的具体示例,我建议使用\u horse \u with \u no \u name的解决方案,但更通用的方法是使用枚举数据类型:

CREATE TYPE ternary AS ENUM (
   'never',
   'sometimes',
   'always'
);

这种数据类型的常量写为字符串constantls,例如。 'never' ,但无论标签的长度如何,内部存储器每个值使用4个字节。

相关问题