記事内に広告が含まれています。

【Oracle】SYSTIMESTAMPを使ってミリ秒以下を表示する

OracleのSYSTIMESTAMPを使用して、SYSDATEよりも高精度なシステム日付を取得する方法です。SYSDATEは秒まで表示できますが、SYSTIMESTAMPはミリ秒以下を表示してくれます。

【スポンサーリンク】

SYSTIMESTAMPとは

SYSTIMESTAMPは、Oracleのデータベース内で保持している、日付と時分秒、秒の小数部を戻します。SYSDATEの場合は日付・時分秒まででしたが、SYSTIMESTAMPはそれよりも更に秒の小数点以下まで取得できます。

秒までを知りたい場合はSYSDATEで充分と思いますが、例えば、大量データ処理で時間計測する場合に、より精度の高い検証をするとなると、SYSTIMESTAMPを使用して、ミリ秒までログを取るということをします。

尚、あまり気にしなくてもいいですが、戻り値の型はTIMESTAMP WITH TIME ZONEという型です。

【スポンサーリンク】

使い方

SYSTIMESTAMPの使い方ですが、ひとまずDUALに対して値を取得してみます。

SELECT SYSTIMESTAMP FROM DUAL;

で、取得した結果がこちら。

f:id:neko_britannia:20200928210501j:plain

「20-09-28-11:56:12.413074」と取得できました。しかし、このままではちょっと使いにくいかもしれません。小数点以下6桁まで必要無いと思います。なので、TO_CHARを使用して、取得結果を加工します。

SELECT TO_CHAR(SYSTIMESTAMP,'yyyy/mm/dd hh24:mi:ss.ff3') FROM DUAL;

ひとまず実行してみましょう。

f:id:neko_britannia:20200928211141j:plain

小数点以下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桁にするとエラーとなります。

f:id:neko_britannia:20200928212027j:plain

「ORA-01821: 日付書式コードが無効です」と言われて怒られました。業務で小数点以下10桁を使用することは、まず無いと思います。なので、小数点以下3桁までで良いかと思います。

【スポンサーリンク】

参考サイト

SYSTIMESTAMP
【スポンサーリンク】

関連記事

【Oracle】SYSDATEとTO_CHARを使用してシステム日付を取得する
OracleのSYSDATEを使用してシステム日付を取得する方法です。データの更新時間等で使用する場合が多いSYSDATEですが、そのまま使用するよりも、ちょっとカスタマイズして使用する場合が多いです。
【Oracle】西暦を和暦に変換する方法
Oracleで西暦から和暦に変換する方法です。データベース側で和暦を扱う時点でそのシステム自体、どうかと思いますが。

.