Oracle SQL中的列是否有布尔类型?

时间:2017-12-26 15:12:58

标签: sql oracle

我试图:

select 1>2 from dual;

但得到了:

ORA-00923: FROM keyword not found where expected

Oracle SQL中的列表达式是否有布尔类型?

我能做到:

select case when 1>2 then 'T' else 'F' end from dual;

最初我试图比较日期字段,我发现最快捷的方式就是差异化,并希望签署......

更新我尝试了SIGN功能,我不知道它是否是特定于供应商的扩展程序:

select SIGN(1-2) from dual;
select SIGN(DATE '2017-01-02' - DATE '2017-02-12') from dual;

但是这个技巧对字符串不起作用......

2 个答案:

答案 0 :(得分:3)

没有,你可以使用0和1作为是/否。

答案 1 :(得分:3)

如果你需要得到结果1,如果某些东西是真的,那么如果它是假的则为0,你可以使用case表达式:

select case when (any_logical_condition_here) then 1 else 0 end as my_col
from   ....
where  ....

例如:

select case when 1 > 2 then 1 else 0 end as bool_result
from   dual;

                            BOOL_RESULT
---------------------------------------
                                      0

注意虽然 - "布尔"严格指TRUE/FALSE逻辑,它没有UNKNOWN的位置。当你处理null时,你必须在SQL中,你需要三值逻辑。如果逻辑条件为case,则上面写的1表达式将返回true,否则返回0。尝试使用1 > null - 真值为UNKNOWNcase表达式将返回0.

相关问题