表示三元SQL数据类型 上下文

表示三元SQL数据类型 上下文,sql,postgresql,sqldatatypes,ternary,Sql,Postgresql,Sqldatatypes,Ternary,我刚刚遇到了数据库中的一个表,它实际上只定义了一个编码值的三元组,作为三元数据类型在整个数据库中使用。乍一看我有点惊讶,我觉得很奇怪;应该有一些三元数据类型吗? 我在网上搜索过,尤其是PostgreSQL,但没有任何明显的成功我的搜索关键字可能错了?!,但也许没有其他解决办法 问题 我想知道,与PostgreSQL中的二进制或布尔数据类型相比,它是否存在三元数据类型,或者更普遍地说,在SQL中,它允许表示三元状态或三元布尔数据类型,这显然是对语言的滥用,我将其作为一个总体概念表示为: +----

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

问题 我想知道,与PostgreSQL中的二进制或布尔数据类型相比,它是否存在三元数据类型,或者更普遍地说,在SQL中,它允许表示三元状态或三元布尔数据类型,这显然是对语言的滥用,我将其作为一个总体概念表示为:

+-------+----------+--------------------+
| id    |     type |  also expressed as |
+-------+----------+--------------------+
| 0     |    false |                  0 |
| 1     |     true |                  1 |
| 2     |  unknown |                  2 |
+-------+----------+--------------------+
未知状态可以是您实际处理的任何第三种状态

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
我想知道与二进制或布尔数据类型相比,是否存在三元数据类型

实际上,布尔数据类型是三元的,因为它可以有值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 number=2的\u horse\u和\u no\u name的解决方案,但更通用的方法是使用枚举数据类型:

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

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

这一点尚不清楚。运算符通常用于两个或多个操作数。true和false是布尔常量。