2013-10-03 82 views
0

請幫我解決這個問題。「選擇Extract分鐘」在oracle中失敗

我需要在表中提取小時(「JAM」欄)分鐘。

我嘗試此查詢:

WITH recordabsen AS 
    (SELECT userid, 
      TO_CHAR(checktime,'MM/DD/YYYY') AS tanggal , 
      MIN(TO_CHAR(checktime,'hh24:mi')) AS JAM 
    FROM checkinout 
    WHERE USERID = '688' 
     AND (checktime BETWEEN to_date('04/01/2013','MM/DD/YYYY') AND to_date('05/01/2013','MM/DD/YYYY')) 
     AND checktype = 'I' 
    GROUP BY userid, 
      TO_CHAR(checktime,'MM/DD/YYYY') 
    ) 
SELECT EXTRACT (MINUTE FROM JAM) AS minute 
FROM recordabsen 
WHERE to_date(JAM,'hh24:mi') > TRUNC(to_date(JAM,'hh24:mi')) + 8/24 

但返回一個錯誤:

無效的提取物領域

+0

提取物起到的日期時間或間隔表達。 JAM是字符類型在查詢 – Noel

+0

@ Ramblin'Man可能,雖然你正在做一個假設 - 這不是經常看到人們稱爲'to_date'上的日期列(這顯然是一個壞主意) –

+0

@JeffreyKemp,其實他沒有做出假設,請參閱WITH-clause:'TO_CHAR(checktime,'hh24:mi'))AS JAM' –

回答

0

只要你做:

to_char(checktime,'hh24:mi') 

你有一個字符串而不是日期,所以也許最好使用字符串函數而不是日期函數,即:

substr("JAM", 4) 

Here is a sqlfiddle demo

+0

好的。謝謝。 –

0

你爲什麼不只是從通過檢查時間WITH子句查詢?在SQLFiddle

SELECT EXTRACT (MINUTE FROM CAST(SYSDATE AS TIMESTAMP)) FROM dual; 

檢查:那麼,如果檢查時間是日期,你可以將其轉換爲TIMESTAMP,這將允許您使用EXTRACT MINUTE http://www.sqlfiddle.com/#!4/d41d8/18054

+0

這也適用,謝謝 –