[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 メーリングリストの案内