oracle 数据库时间比较,请高手指点一下!

oracle 数据库时间比较,请高手指点一下!,第1张

1. 你用30补充日的信息,如果是二月怎么办,就报错了。

2. 当前时间不需要这么复杂TO_DATE(to_char(TRUNC(SYSDATE),'yyyy/mm/dd'), 'yyyy/mm/dd')

TRUNC(SYSDATE) 即可

3. 个人理解,你的年、月 字段 应该是数字类型吧,那么一个先转换(如果是字符,则不需转换):

TO_DATE(to_char(D.plan_year) || '/' || to_char(D.plan_month) || '/30', 'yyyy/mm/dd')

我给你一个思路:

当前日期 - (某年某月 第一日 + 1月 - 1日)

其中: 某年某月 第一日 + 1月 即下一月的第一天; 再 -1日 就是某年某月的 最后一天:

select * from M_PLAN_INFO D WHERE TRUNC(SYSDATE) - (add_months(TO_DATE(to_char(D.plan_year) || '/' || to_char(D.plan_month) || '/30', 'yyyy/mm/dd'),1) - 1 ) >30

SELECT REGENDDATE FROM TABLE WHERE SYSDATE >= ADD_MONTHS('Y',3,REGENDDATE)

如果REGENDDATE是字符型的话,自己转一下吧!~

时间日期字段在数据库底层都是以时间戳的形式存储的,日期比较其实就简单的转换成了时间戳的比较, 也就是数字的比较

时间戳就是 格林威治时间1970年01月01日00时00分00秒到指定日期时间之间的秒数

2012-01-11 00:00:00的时间戳就是1326211200比较时间字段,底层实际比较的就是这个数字的时间戳


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6777362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存