0
我在yyyy-mm-dd格式的oracle中有一个日期。是否有可能得到以下几点:
1.确切日期1年前在yyyy-mm-dd格式(so:2013-02-01 - > 2012-02-01 and 2013-02-28- - > 2012-02-29)
2.相应的开始日期和YYYY-MM-DD格式获取指定日期的月份的第一个和最后一个日期
我在yyyy-mm-dd格式的oracle中有一个日期。是否有可能得到以下几点:
1.确切日期1年前在yyyy-mm-dd格式(so:2013-02-01 - > 2012-02-01 and 2013-02-28- - > 2012-02-29)
2.相应的开始日期和YYYY-MM-DD格式获取指定日期的月份的第一个和最后一个日期
同月的最后一天试试这个:
SELECT
TRUNC(DATE '2013-02-01', 'MM') - INTERVAL '1' YEAR AS one_year_ago_first_day,
LAST_DAY(TRUNC(DATE '2013-02-28', 'MM') - INTERVAL '1' YEAR) AS one_year_ago_last_day,
TRUNC(DATE '2013-02-11', 'MM'),
LAST_DAY(DATE '2013-02-11')
FROM
dual;
基本上,你可以得到通过使用TRUNC
和MM
模型格式的一个月的第一天,所以在一个月之后的所有内容都将被截断(所以日期将被设置为1)。
LAST_DAY
- 此函数返回给定日期的月份中最后一天的日期作为参数。
您还可以使用INTERVAL
数据类型并从给定日期中减去它。
为什么从2013年2月1日2012年2月29日的“确切日期1年前”?这更像是11个月和1天前。 “你正好在1年前”的定义是什么?什么是闰年的2月29日之前的1年? 2月28日在前一年?去年的3月1日?一个错误?还有别的吗? –
难道你不是指2013-03-01 - > 2012-02-29而不是2013-03-01 - > 2012-02-29?即使这没有多大意义,我会认为2013-03-01 - > 2012-03-01会有意义。唯一的问题是2012-02-29 - > 2011-02-28 ?? – Dijkgraaf
谢谢。对不起,我纠正了它。 – Victor