我的表格中有一个日期列,格式为“01-JAN-99”。我需要使用 sysdate 显示当前日期与表中的日期之间的差异。但我必须按年和月显示它。因此,如果日期是 148 个月前,那么它将显示 12 年零 4 个月。
问问题
493 次
3 回答
3
假设该列实际上是 a DATE
(没有格式)而不是 aVARCHAR2
表示日期(有格式),你会想要类似
TRUNC( months_between( sysdate, date_column )/ 12 ) || ' Years and ' ||
TRUNC( MOD( months_between( sysdate, date_column ), 12 ) || ' Months.'
这假设如果差异是您想要忽略小数的小数月数。如果要四舍五入到最接近的月份,请在计算月数时将替换为TRUNC
a 。ROUND
于 2013-07-25T01:19:40.640 回答
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;
于 2013-07-25T01:20:10.653 回答
-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')将是一列或一个参数,以避免重复。
于 2013-07-25T01:29:10.503 回答