首页 > 解决方案 > 在没有 DUAL 表的情况下使用 SYSDATE()

问题描述

我很惊讶这个问题没有被问到。我必须在这里遗漏一些非常明显的东西,我已经准备好接受所有的反对票和 3 秒的答案。

在 MSSQL 中,您GETDATE()无需依赖数据库表即可调用,但在 OracleSYSDATE中必须来自 DUAL。有没有办法在不通过 DUAL 的情况下在 Oracle 中获取当前日期?

编辑

显然,这与我对它的错误使用没有太大关系,SYSDATE但更多的是。请参阅以下 WHERE 子句:

WHERE (extract(YEAR from ORDER_DATE) = (case when extract(month from SYSDATE()) < 11 then extract(year from SYSDATE()) else extract(year from SYSDATE())+1 end)

以上将不起作用,从这里的答案看来,不建议在其中添加双重。这里的最佳解决方案是什么?

标签: sqloraclesysdate

解决方案


有没有办法在不通过 DUAL 的情况下在 Oracle 中获取当前日期?

sysdate 是一个伪列,我们可以将其视为返回当前日期时间的函数。所以它可以像任何其他功能一样使用。是的,在像...这样的查询投影中

 select sysdate from dual;

...或者 ...

insert into sometable (id, date_created)
values (id_seq.nextval, sysdate);

但也在 where 子句中。过去三十天内雇用的员工:

 select * from emp
 where hire_date > sysdate - 30

要找到今年被录用的员工,我们可以这样做:

 select * from emp
 where extract(year from hire_date) = extract(year from sysdate)

...但这可能会表现得更好

 select * from emp
 where hire_date >= trunc(sysdate, 'YYYY') -- resolves to 2019-01-01
 /

在 PL/SQL 中:

declare
    ld date;
begin
    ld := trunc(sysdate); 
end;

推荐阅读