0

我的表格中有一个日期列,格式为“01-JAN-99”。我需要使用 sysdate 显示当前日期与表中的日期之间的差异。但我必须按年和月显示它。因此,如果日期是 148 个月前,那么它将显示 12 年零 4 个月。

4

3 回答 3

3

假设该列实际上是 a DATE(没有格式)而不是 aVARCHAR2表示日期(有格式),你会想要类似

TRUNC( months_between( sysdate, date_column )/ 12 ) || ' Years and ' ||
TRUNC( MOD( months_between( sysdate, date_column ), 12 ) || ' Months.'

这假设如果差异是您想要忽略小数的小数月数。如果要四舍五入到最接近的月份,请在计算月数时将替换为TRUNCa 。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 回答