Oracle之间的月份

时间:2015-05-19 11:36:47

标签: sql oracle

在我的选择中,我有这个子选择:

(SELECT CAR FROM CAR_OV_CARNEW
 WHERE CARFK = table1.id AND carold = 'CAR_SHARE_OLD') CPEND

给出了以下coloumn作为输出:

CPEND
-----
11.07.2011
15.05.2014
14.08.2016

我需要的是MONTHSsysdateCPEND的区别。

我试过MONTHS_BETWEEN,但它不适合我

最终结果应为:

    CPEND (DATE)  DIFFMONTHS_TEMP
    -----         -----
    11.07.2011    46
    15.05.2014    12
    14.08.2016    -14

我用这句话试了一下:

SELECT MONTHS_BETWEEN (TO_DATE(sysdate),
       TO_DATE((SELECT CAR FROM CAR_OV_CARNEW
                 WHERE CARFK = table1.id AND carold = 'CAR_SHARE_OLD') CPEND,'MM-DD-YYYY') ) "Months"
FROM table1;

1 个答案:

答案 0 :(得分:3)

规范方法是:

SELECT (SELECT MONTHS_BETWEEN(SYSDATE, CAR)
        FROM CAR_OV_CARNEW
        WHERE CARFK = table1.id AND carold = 'CAR_SHARE_OLD'
       )

如果CAR存储为字符串而非日期,则需要将其转换为:

SELECT (SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE(CAR, 'DD.MM.YYYY'))
        FROM CAR_OV_CARNEW
        WHERE CARFK = table1.id AND carold = 'CAR_SHARE_OLD'
       )

此外,MONTHS_BETWEEN()返回数字类型。如果你想要它作为一个整数(由你的结果建议),那么添加逻辑来转换,取楼层,上限或舍入值。