我的表格中有一个日期列,格式为'01 -JAN-99'。我需要显示当前日期,使用sysdate和表格中的日期之间的差异。但我必须按年和月显示它。因此,如果日期是148个月前,那么它将显示12年和4个月。
答案 0 :(得分:3)
假设该列实际上是DATE
(没有格式)而不是表示日期(具有格式)的VARCHAR2
,您可能需要像
TRUNC( months_between( sysdate, date_column )/ 12 ) || ' Years and ' ||
TRUNC( MOD( months_between( sysdate, date_column ), 12 ) || ' Months.'
这假设如果差异是您想要忽略小数量的小数月份。如果您要舍入到最近的月份,请在计算月数时将TRUNC
替换为ROUND
。
答案 1 :(得分:0)
试试这个脚本:
SELECT TRUNC (MONTHS_BETWEEN (sysdate, date_col) / 12) || ' YEARS '
|| MOD (TRUNC (MONTHS_BETWEEN (sysdate, date_col)), 12) || ' MONTHS '
|| (TO_DATE (sysdate) – ADD_MONTHS (date_col,TRUNC (MONTHS_BETWEEN (sysdate, date_col)))) || ' DAYS'
FROM DUAL;
答案 2 :(得分:-1)
这对我有用:
SELECT DATEDIFF(yy, '04/01/1999 00:00:00', GETDATE()) AS Years, DATEDIFF(m, '04/01/1999 00:00:00', GETDATE()) - (DATEDIFF(yy, '04/01/1999 00:00:00', GETDATE()) * 12) AS Months
理想情况下,日期('04 / 01/1999')将是一个列或参数,以避免重复。