OracleのSYSTIMESTAMPを使用して、SYSDATEよりも高精度なシステム日付を取得する方法です。SYSDATEは秒まで表示できますが、SYSTIMESTAMPはミリ秒以下を表示してくれます。
SYSTIMESTAMPとは
SYSTIMESTAMPは、Oracleのデータベース内で保持している、日付と時分秒、秒の小数部を戻します。SYSDATEの場合は日付・時分秒まででしたが、SYSTIMESTAMPはそれよりも更に秒の小数点以下まで取得できます。
秒までを知りたい場合はSYSDATEで充分と思いますが、例えば、大量データ処理で時間計測する場合に、より精度の高い検証をするとなると、SYSTIMESTAMPを使用して、ミリ秒までログを取るということをします。
尚、あまり気にしなくてもいいですが、戻り値の型はTIMESTAMP WITH TIME ZONEという型です。
使い方
SYSTIMESTAMPの使い方ですが、ひとまずDUALに対して値を取得してみます。
SELECT SYSTIMESTAMP FROM DUAL;
で、取得した結果がこちら。
「20-09-28-11:56:12.413074」と取得できました。しかし、このままではちょっと使いにくいかもしれません。小数点以下6桁まで必要無いと思います。なので、TO_CHARを使用して、取得結果を加工します。
SELECT TO_CHAR(SYSTIMESTAMP,'yyyy/mm/dd hh24:mi:ss.ff3') FROM DUAL;
ひとまず実行してみましょう。
小数点以下3桁までに表示を絞ってみました。SYSDATEの記事でも紹介していますが、TO_CHARの第2引数に日付フォーマットを渡して実行して、自分で見やすくするように出来ます。SYSDATEと違うのは、小数点以下の書式ですね。秒を表現しているSSの後ろに「FF3」と記載しています。これが小数点以下3桁を意味しています。以下に例を記載します。
--小数点以下1桁 SELECT TO_CHAR(SYSTIMESTAMP,'yyyy/mm/dd hh24:mi:ss.ff1') FROM DUAL; --小数点以下2桁 SELECT TO_CHAR(SYSTIMESTAMP,'yyyy/mm/dd hh24:mi:ss.ff2') FROM DUAL; --小数点以下3桁 SELECT TO_CHAR(SYSTIMESTAMP,'yyyy/mm/dd hh24:mi:ss.ff3') FROM DUAL; --小数点以下4桁 SELECT TO_CHAR(SYSTIMESTAMP,'yyyy/mm/dd hh24:mi:ss.ff4') FROM DUAL; --小数点以下5桁 SELECT TO_CHAR(SYSTIMESTAMP,'yyyy/mm/dd hh24:mi:ss.ff5') FROM DUAL;
上記を試しに実行してみて下さい。ちなみに小数点以下どこまで表示できるのかと言うと、OS等の環境によって異なるみたいです。Oracle APEXでは小数点以下9桁まで大丈夫でした。小数点以下10桁にするとエラーとなります。
「ORA-01821: 日付書式コードが無効です」と言われて怒られました。業務で小数点以下10桁を使用することは、まず無いと思います。なので、小数点以下3桁までで良いかと思います。
参考サイト
関連記事
.