一尘不染

相当于Oracle的Access / jet解码

sql

在Access(或Jet,就此而言)中,Oracle的decode()是否具有等效项。

我面临的问题是:我应该基本上根据状态和日期(所有记录的状态均为2)对结果集进行排序(排序)。

在甲骨文中,我会像

select
  ...
from
  ...
where
  ..
order by
  decode(status, 2, 0, 1),
  date_column

阅读 127

收藏
2021-03-08

共1个答案

一尘不染

最接近的类比是SWITCH()函数,例如

甲骨文:

SELECT supplier_name,
       decode(supplier_id,  10000, 'IBM',
                            10001, 'Microsoft',
                            10002, 'Hewlett Packard',
                                   'Gateway') result
  FROM suppliers;

访问数据库引擎

SELECT supplier_name,
       SWITCH(supplier_id = 10000, 'IBM',
              supplier_id = 10001, 'Microsoft',
              supplier_id = 10002, 'Hewlett Packard',
              TRUE, 'Gateway') AS result
  FROM suppliers;

请注意,使用该SWITCH()函数,您每次都必须提供完整的谓词,因此,您不仅可以仅使用Supplier_id。对于默认值,请使用对人类读者显而易见的谓词,例如TRUE1 = 1或实际上是TRUE:)

可能不明显的是该SWITCH()函数中的逻辑不会短路,这意味着该函数中的每个表达式都必须能够正确地求值。如果您需要逻辑短路,则需要使用嵌套IIF()函数。

2021-03-08