Oracle:如何比较查询中的两个NUMBERS值?'TRUE'或'FALSE'?

Rev*_*ous 8 sql oracle

我想比较两个数字.我们采取即1和2.

我试着写下面的查询,但它根本没有按预期工作(Toad说:ORA-00923:找不到FROM关键字):

SELECT 1 > 2 from dual
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

另外我如何比较两个日期?

A.B*_*ade 8

sql中没有布尔类型(至少在oracle中).
你可以使用case:

SELECT CASE when 1 > 2 THEN 1 ELSE 0 END FROM dual
Run Code Online (Sandbox Code Playgroud)

但你的解决方案(解码)也很好,请阅读此处


Dav*_*dge 6

SIGN()函数确实可能(中),如果你想测试A> B,A = B和A <B,可能是你的兴趣平等分类的最佳途径,它将接受日期过期或数字-numeric作为参数.

我会优先使用Case语句,而不是解码.

Select
  case sign(actual-target)
    when -1 then ...
    when  0 then ...
    when  1 then ...
  end
Run Code Online (Sandbox Code Playgroud)

  • 当我们所有的都是`DECODE`时,使用`SIGN`是必要的,但是对于`CASE`,我认为这只会使代码不那么清晰.你可以简单地写出比较:`CASE WHEN a> b THEN ...当a = b那么......当<b THEN ... END`时. (5认同)