回答:
私は数年前に非常に似た問題を抱えていましたが、それから私ができることを発見しました
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
やってみて (これはデータベースごとに機能します。すべてのデータベースのソリューションでは、このパラメーターを設定しますpostgresql.conf
-@a_horse_with_no_nameのおかげです。)
デフォルト設定はロケールに依存しないことに注意してください。ただし、initdb
必要に応じて設定した後、で自分で変更できますpostgresql.conf
。
@swasheckのコメントは、私の設定では次のことに気づきました。
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
設定datestyle
には次の効果があります。
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
さて、これは実際には期待されていません-そして、それは他のサーバーでen_US.UTF8
も同じです。試してみると"ISO, DMY"
、出力を"ISO"
生成するときに、一部が多かれ少なかれ他の部分をオーバーライドしていることを示唆しています。ための入力以下の表にまとめたような値には、期待される効果を有します。
input values
'2016/01/21' '01/21/2016' '21/01/2016' output
──────────────────────────────────────────────────────────────────────
ISO, YMD OK -- -- 2016-01-21
ISO, DMY -- OK -- 2016-01-21
ISO, MDY -- -- OK 2016-01-21
-は、指定された入力スタイルが指定されたdatestyle
設定に対してエラーになることを意味します。
ドキュメントを注意深く読むと、datestyle
部分的に競合する設定のペアであることがわかります。
歴史的な理由により、この変数には2つの独立したコンポーネントが含まれています。出力形式の仕様(ISO、Postgres、SQL、またはドイツ語)と年/月/日順序の入力/出力仕様(DMY、MDY、またはYMD)です。
私にとっては、少し実験してニーズに合ったものを見つけなければならないことを意味します-しかし、最良の方法はデフォルトのままにして、常に明確な入力フォーマットを使用することです。これらの2つは、'YYYY-MM-DD'
と'YYYYMMDD'
。私は前者を好みます-このIRLを使用することさえ;)
注:のdatestyle
設定(およびその他のランタイム設定)は、postgresql.conf
で上書きできます。ALTER DATABASE bla SET datestyle ...
単一のデータベースに永続的に設定するかSET datestyle TO ...
、現在のセッションに設定することができます。後者は、異なる日付形式でサードパーティのデータをインポートするときに便利です。
ありがとう@a_horse_with_no_name | @dezso | しゅう
方法1:データベースごとにのみ日付スタイルを設定する
show datestyle;
現在の日付スタイル「ISO、DMY」または「ISO、MDY」を表示します
以下のクエリで設定されたpostgresのDMYまたはMDYに必要なものに応じて
ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";
または
ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";
最も重要なステップ:常に日付スタイルを設定した後postgresを再起動する
sudo service postgresql restart
または
sudo /etc/init.d/postgresql restart
設定をテストできます
クエリの下にDMYを設定している場合、あなたのために働くはずです
クエリ:select '20/12/2016'::date
出力: "2016-12-20"
または
クエリの下にMDYを設定している場合、動作するはずです
クエリ:select '12/19/2016'::date
出力: "2016-12-19"
方法2:永続的に:構成ファイルで設定したものは、将来作成するすべてのデータベースに設定されます
/etc/postgresql/9.3/main/postgresql.confセット
datestyle = 'iso, dmy'
または datestyle = 'iso, mdy'
最も重要なステップ:常に日付スタイルを設定した後postgresを再起動する
sudo service postgresql restart
または
sudo /etc/init.d/postgresql restart
設定をテストできます
クエリの下にDMYを設定している場合、あなたのために働くはずです
クエリ:select '20/12/2016'::date
出力: "2016-12-20"
または
クエリの下にMDYを設定している場合、動作するはずです
クエリ:select '12/19/2016'::date
出力: "2016-12-19"