[pgsql-jp: 25089] Re: date_part() milliseconds の ver.7.2.x での返り値は?
Tatsuo Ishii
t-ishii @ sra.co.jp
2002年 3月 5日 (火) 10:17:16 JST
石井です.
> > date_part() または EXTRACT の ミリ秒の返り値についての質問です。
> > (マイクロ秒でも同じですが)
> >
> > マニュアル(下記URL)では、
> > http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/functions-datetime.html
> > > milliseconds(ミリセカンド)
> > > 分数部分も含めた、1000をかけた秒フィールド。秒すべてを返すことに 注意して下さい。
> > >
> > > SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5');
> > > 結果: 28500
> > となっています。
> >
> > 実際に実行してみると、秒の整数部分は返ってきません。(下記実行結果)
>
> マニュアルの例の通りに実行すれば,マニュアルに書いてある通りの結果が返
> りますよ.つまり source が TIME なら問題ない.これは7.1でも7.2でも一緒
> です.
>
> 問題は,source が TIMESTAMP のときの動作ですね.
>
> test=# select current_timestamp,extract(milliseconds from current_timestamp);
> timestamptz | date_part
> -------------------------------+-----------
> 2002-02-27 14:45:53.945529+09 | 945.529
> (1 row)
>
> ソースを直すのは簡単ですが,マニュアルが正しいのかどうか今一つはっきり
> しないので本家に聞いてみます.
> # それとSQL99のスペックも調べてみます.
> # 今札幌に出張中なのでちょっと時間がかかるかも知れませんが...
まず,SQL99のスペックでは,EXTRACTの第一引数でmillisecondsは規定されて
おらず,これはPostgreSQLの拡張使用だということになります.したがって,
マニュアルと実装の不一致をどう整合させるのかは,明確な基準はないことに
なります.
そこで本家のMLで,実装を直してマニュアルに合わせることを提案したのです
が,特に反対もないのでcurrentはそのように直してしまいました.
今後リリース予定の7.2.1(7.2-stable)も,これからそのように直します.
test=# select current_timestamp,extract(milliseconds from current_timestamp);
timestamptz | date_part
-------------------------------+-----------
2002-03-05 10:16:31.470404+09 | 31470.404
(1 row)
なお,microsecondsも同様に修正されています.
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内