trunc / sysdate ...有趣的语法需要解释

时间:2014-02-20 17:47:09

标签: sql oracle

我相信这会输出当周星期日的日期,但我不知道为什么。 有人可以打破这里发生的事情。

SELECT trunc(sysdate+1,'DAY') FROM DUAL;

4 个答案:

答案 0 :(得分:2)

当第二个参数为DAY时,TRUNC功能将返回星期的开始日期。今天Sysdate周四返回,周五返回+1等等。所以当你添加3时,它会给你下周日,标志着新周的开始。

答案 1 :(得分:1)

运行此选项以了解trunc做什么

SELECT to_char(trunc(sysdate+1, 'DAY'),'dd/mon/yyyy hh:mi:ss') FROM DUAL;

DAY确实会返回一周的开始日期,但trunc也会截止该日期的小时,分​​钟,秒。 Sysdate将有一些小时和分钟,但在截断后它默认为00.00.00.000

通过调用此

trunc(sysdate+1,'DAY')

您可能会看到16-FEB-14。您无法看到实际结果,因为Oracle不会为您显示会议记录。如果你打电话给这个

SELECT to_char(sysdate+1,'dd/mon/yyyy hh:mi:ss') FROM DUAL;

您将看到所有时间细节。 Trunk取消了它。

换句话说,你有3个效果 - sysdate + 1 - 下一个日期,Day - 一周的第一天,Trunc - 小时,分钟,秒等等。 / p>

答案 2 :(得分:0)

请参阅http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions230.htm

'DAY'截断提供给一周开始日期的日期。 请注意,根据您的语言环境,这也可以是星期一而不是星期日。

sysdate + 1只是在当前日期增加了一天,这可能是为了确保你是星期天你回到当前的星期日而不是之前的星期日。

答案 3 :(得分:0)

从双重中选择to_char(sysdate + 1,'dd-mon-yy hh24:mi:ss'); ---- 22-feb-14 02:10:03

从双重选择to_char(trunc(sysdate + 1,'year'),'dd-mon-yy hh24:mi:ss'); ----- 01-jan-14 00:00:00

从双重选择to_char(trunc(sysdate + 1,'month'),'dd-mon-yy hh24:mi:ss'); --- 01-feb-14 00:00:00

从双重中选择to_char(trunc(sysdate + 1,'day'),'dd-mon-yy hh24:mi:ss'); --- 16-feb-14 00:00:00

比较上述查询输出,希望这对您有帮助。