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