我想比较两个数字。我们取1和2。
我尝试编写以下查询,但它根本无法正常工作(Toad说:ORA-00923:找不到FROM关键字):
SELECT 1 > 2 from dual
DECODE类似于Switch案例,那么如何才能获得表达式评估的结果(即数字比较),将其置于选择列表中?
我找到了一个使用函数而不是SELECT LIST中的表达式的解决方案:即
select DECODE(SIGN(actual - target)
, -1, 'NO Bonus for you'
, 0,'Just made it'
, 1, 'Congrats, you are a winner')
from some_table
有更优雅的方式吗?
另外,如何比较两个日期?
答案 0 :(得分:8)
sql中没有布尔类型(至少在oracle中)
你可以使用case
:
SELECT CASE when 1 > 2 THEN 1 ELSE 0 END FROM dual
但是您的解决方案(解码)也很好,请阅读here
答案 1 :(得分:5)
SIGN()函数确实可能是分类(in)等于你可能感兴趣的最佳方法,如果你想测试一个> b,a = b和a< b,它将接受date-date或numeric-numeric作为参数。
我按优先顺序使用Case语句,而不是解码。
Select
case sign(actual-target)
when -1 then ...
when 0 then ...
when 1 then ...
end
答案 2 :(得分:1)
你可以用sql
比较两个日期方法(1):
SELECT TO_DATE('01/01/2012') - TO_DATE('01/01/2012')
FROM DUAL--gives zero
方法(2):
SELECT CASE
when MONTHS_BETWEEN('01/01/2012','01/01/2010') > 0
THEN 'FIRST IS GREATER'
ELSE 'SECOND IS GREATER OR EQUAL' END
FROM dual
抱歉,我无法格式化格式工具栏消失的代码!
有谁知道为什么?
答案 3 :(得分:1)
SELECT (CASE
WHEN (SIGN(actual - target) > 0 ) THEN
'NO Bonus for you'
ELSE
'Just made it' END)
FROM dual