実行せずに「日付」が「MDY」と表示されるようにデータベースを設定するにはどうすればよいですか。
SET datestyle = "ISO, MDY";
毎回アクセスしようとしていますか?私はPostgresqlバージョン9.1、Ubuntu 12.04を使用しています。データベースのインストール時のシステムロケールはen_CA.utf8
に設定されていましたが、最近en_US.utf8
に変更しました。
show lc_CTYPE
戻り値:-> "en_CA.UTF-8"
だが
show LC_CoLLATE
戻り値:-> "en_CA.UTF-8"
私は何年も前に非常によく似た問題を抱えていましたが、自分にできることがわかりました
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値の場合、次の表にまとめられているように、期待される効果があります。
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を使用する;)
注:postgresql.conf
のdatestyle
設定(およびその他のランタイム設定)は、ALTER DATABASE bla SET datestyle ...
によって上書きされ、単一のデータベースに対して永続的に設定されるか、またはSET datestyle TO ...
によって上書きされます。現在のセッション。後者は、日付形式が異なるサードパーティのデータをインポートする場合に役立ちます。
ありがとう@ a_horse_with_no_name | @dezso | @ypercubeᵀᴹ
方法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";
最も重要なステップ:常にdatestyle再起動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'
OR datestyle = 'iso, mdy'
最も重要なステップ:常にdatestyle再起動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"