sql - 在没有 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)
以上将不起作用,从这里的答案看来,不建议在其中添加双重。这里的最佳解决方案是什么?
解决方案
有没有办法在不通过 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;
推荐阅读
- macros - Rust 宏可以像 C 预处理器宏一样扩展十六进制数字吗?
- vb.net - 如何制作VB.Net Sever程序打开网页
- ios - 删除 UICollectionView 中的特定项目
- java - 使用java的FTPS
- java - 忽略 Swagger 模型中的未知属性
- r - ggplot2 不会安装在 rstudio 中
- assembly - 汇编中的空标签占用内存而没有存储指令?
- xml - PowerShell 将数据转储到 xml 文件中,然后再读取它并将其转换为原始对象
- d3.js - 将平移位置设置为新的 x,y 位置
- php - 在 Woocommerce 订单管理列表中显示用户失败并取消订单计数