関数型の解決に感謝します dateを渡すこともできます generate_series()の値 暗黙的があるため dateからキャスト timestampへ dateからも timestamptzへ 。あいまいになりますが、timestamptz 「優先」 「日付/時刻タイプ」の中で。詳細な説明:
- PostgreSQLで2つの日付間の時系列を生成する
裸のdateの場合 現地時間00:00 キャストで想定されています。 dateを使用する場合、現在のタイムゾーン設定が結果に直接影響することに注意してください 明らかに、「2014-01-10 00:00」は、東京ではニューヨークとは異なる時点を表しているため、入力として。
Postgresはどのタイプが受け入れ可能かをどのように決定しますか?
Postgresは基本的に3つのタイプのキャストを区別します:
Explicit casts .. CASTを使用する場合 または:: 構文。Assignment cast ..値がターゲット列に割り当てられたときの暗黙的なキャスト。Implicit cast ..他のすべての式での暗黙のキャスト。
暗黙的が必要です システムに登録されたキャストを入力タイプから期待されるタイプにキャストして、関数が入力値をサイレントに受け入れる(および変換する)ようにします。
定義されているキャストを確認するには timestamptz 、カタログテーブルpg_castをクエリできます :
SELECT castsource::regtype, casttarget::regtype, castcontext
FROM pg_cast
WHERE casttarget = 'timestamptz'::regtype;
castsource | casttarget | castcontext
-----------------------------+--------------------------+-------------
abstime | timestamp with time zone | i
date | timestamp with time zone | i
timestamp without time zone | timestamp with time zone | i
timestamp with time zone | timestamp with time zone | i
これらのキャストはすべて暗黙的です 。 castcontextに関するドキュメントごと :
キャストを呼び出すことができるコンテキストを示します。
e明示的なキャストとしてのみ意味します(CASTを使用) または::構文)。a明示的にだけでなく、ターゲット列への暗黙的な割り当てを意味します。i暗黙的に表現やその他の場合を意味します。
大胆な強調鉱山。