2013-10-29 162 views
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格式获取指定日期的月份的第一个和最后一个日期

+0

为什么从2013年2月1日2012年2月29日的“确切日期1年前”?这更像是11个月和1天前。 “你正好在1年前”的定义是什么?什么是闰年的2月29日之前的1年? 2月28日在前一年?去年的3月1日?一个错误?还有别的吗? –

+0

难道你不是指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

+0

谢谢。对不起,我纠正了它。 – Victor

回答

1

同月的最后一天试试这个:

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; 

基本上,你可以得到通过使用TRUNCMM模型格式的一个月的第一天,所以在一个月之后的所有内容都将被截断(所以日期将被设置为1)。

LAST_DAY - 此函数返回给定日期的月份中最后一天的日期作为参数。

您还可以使用INTERVAL数据类型并从给定日期中减去它。

相关问题