2012-10-26 49 views
3

我正在嘗試編寫自己的timestampdiff(DAY,first_date,second_date)函數,它將與MySql tumestampdiff函數的工作方式相同。如何爲oracle編寫自己的timestampdiff函數

但我無法忍受什麼是第一個參數的數據類型,以便它可以接受日,月或年的關鍵工作字。

需要專家評論作爲什麼樣的數據類型是在函數參數?

其次,我可以在哪裏看到mysql內置函數的實現。

確定添加更加清晰:

我有一個查詢select * from application a where timestampdiff(DAY,a.created_date, CURRENT_TIMESTAMP(3)) >= 30;

我想上面查詢應該在Oracle和MySQL的運行。

希望你明白我的觀點。我想在oracle中編寫相同的函數,以便我不必進行任何代碼更改,並且它將受到兩個數據庫的支持。

現在在上面我無法確定如果我要寫函數應該是第一個參數類型。

感謝

+1

你知道,你可以直接減去兩個時間戳?例如'first_date - second_date'?根據數據類型,它會給你一個'INTERVAL'(如果兩者都是'TIMESTAMP')或'NUMBER'(如果兩者都是'DATE's。 –

+0

@a_horse_with_no_name,實際上減去2個日期並不會導致「常規」數字數據類型 - http://stackoverflow.com/a/9346340/1083652(就像一個附註) –

+0

@ABCade:有趣的閱讀感謝。但對於只是「使用」的結果它仍然是一個整數(例如,JDBC驅動程序返回數據類型爲NUMBER的這樣一列) –

回答

0

我不認爲你需要編寫自己的timestampdiff功能,因爲甲骨文已經擁有了一個:EXTRACT

EXTRACT(DAY from (first_date - second_date)) 

如果由於某種原因,你想這樣做,那麼我不認爲有關「datefield」關鍵字(年,月,日等)的datatype
但因爲它是一組有限的,你可以得到一個VARCHAR2,並在你的代碼中的一些語句if ...

+0

原因是希望同樣的函數應該在數據庫mysql中運行和oracle。我知道替代解決方案。我不尋找替代解決方案只是想iff我想寫timestampdiff然後應該是什麼類型的第一個參數 –

+0

@ ZunedAhmed,我明白了,我不知道這可以做到(並且不能ch eck this now),但也許你可以創建一個包含'DAY','MONTH'等全局變量的包 - 它們可以是數字,然後爲月份全局變量的全局變量MONTH創建一個'synonym' DAY,等等上。在你的函數中,第一個參數是一個數字併發送一個同義詞 –

相關問題