[pgsql-jp: 25300] Re: date型に31 年2月の日付が入らない?
Shindo@AtSystem
shindo @ atsystem.jp
2002年 3月 15日 (金) 09:22:11 JST
進藤です。お世話になっております。
--- Cyoki Cyoki --- Cyoki Cyoki ---
>A.1.2. は眺めていたのですが、31 02 01 という3つのトークンに分割され
>最初の"31"を評価するときに
>> 3. トークンが数値あるいは、数値フィールドの場合
>> c.もしそれが2桁以上の場合、年と解釈されます。
>の条件に当てはまるため、31年02月01日と解釈されると思っていました。
>
--- Cyoki Cyoki --- Cyoki Cyoki ---
マニュアルには、以下の記述があります。
和暦(昭和、平成など)としての解釈は存在しませんから、
/で区切られた3組の数字を、最初の数字が12より大きいので
US形式だと見なして、以降の判定をしているのではないでしょうか。
-で区切られていれば、年-月-日のISO形式としてご希望のような
判定になるのではないでしょうか。
>3.4.1.1. 日付
>date 型では下記の入力が可能です。
>
>Table 3-7. 日付入力
>
>例 説明
>January 8, 1999 変更不可
>1999-01-08 ISO-8601のフォーマット。推奨。
>1/8/1999 US形式。 ヨーロッパモードでは8月1日と認識されます。
>8/1/1999 ヨーロッパ形式。USモードでは8月1日と認識されます。
>1/18/1999 米国形式。このケースではどのモードでも1月18日と認識されます。
>19990108 ISO-8601の年、月、日付
>990108 ISO-8601の年、月、日付
>1999.008 年とその日までの累計
>99008 年とその日までの累計
>January 8, 99 BC 西暦紀元の99年前
>
>A.1.2
> 1.a.もしトークンがダッシュ("-")や、スラッシュ("/")、あるいはドット(".")を 含
んで>いた場合、それは月名を含んでいる日付文字列です。
> 3.d.もしヨーロッパ式の日付モード、"日"フィールドがまだ読みこまれていない、
その値>が 31以下という全ての条件が 当てはまる場合、それは"日"と解釈され
ます。
> 3.e.もし非ヨーロッパ式(US式)の日付モードの場合で、さらに"月"のフィールドが
まだ読>みこまれていなく、 そしてその値が 12以下という全ての条件が 当ては
まる場合、それは">月"と解釈されます。
> 3.f.もし"日"フィールドが読みこまれておらず、さらにその値が 31以下の場合は、
"日">と解釈されます。
>
--- Cyoki Cyoki --- Cyoki Cyoki ---
>もしかして、3つのトークンに分割されるというのが間違いで、
>1.b の
>> もしトークンがダッシュ("-")や、スラッシュ("/")、あるいはドット(".")を
>> 含んでいた場合、それは月名を含んでいる日付文字列です。
>で解釈は終了し、INSERT時に DETESTYLE が US なので DD/MM/YY という日付
>が入らないのでエラーとなる、ということなのでしょうか?
>
>これならすっきりです。
--- Cyoki Cyoki --- Cyoki Cyoki ---
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
進藤寿則@アットシステム
shindo @ atsystem.jp
shindo @ sasoh.ne.jp
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
pgsql-jp メーリングリストの案内