我试图:
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;
但是这个技巧对字符串不起作用......
答案 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
- 真值为UNKNOWN
,case
表达式将返回0.