MySqlに日付型の列があります。デフォルトの MySql 日付形式は YYYY/MM/DD です。しかし、実際には DD/MM/YYYY 形式を使用することを好みます。
列の日付形式を変更できますか?
いいえ、DATE、DATETIME、または TIMESTAMP 列のデフォルトの MySQL 形式を変更することはできません。
ただし、SQL ステートメントで MySQL 関数を使用して、DATE 式を別の形式の文字列として出力できます。
DATE_FORMAT( datecol , '%m/%d/%Y') AS datecol
(これは SELECT リストでは問題なく機能しますが、これを述語 (つまり WHERE 句) で使用することは避けてください。そこで、裸の列を参照し、好みの形式 'MM/DD/YYYY' の文字列を次のように変換します。 STR_TO_DATE 関数、例えば
datecol >= STR_TO_DATE('07/16/2012','%m/%d/%Y')
そうは言っても、データベースとのやり取りでMySQLのデフォルトのDATE形式を使用し、コードでフォーマットの変更を処理する方が、実際にはより適切に機能すると思います.
他の DBMS には、セッション単位でも変更できるデフォルトの形式があります。たとえば、Oracle ではNLS_DATE_FORMAT
セッション変数を変更するだけで、Oracle は入力と出力の両方にカスタム形式を使用します。MySQL はそうではありません。
この目的に適していると思われるサーバー変数(date_format
および)がいくつかあります。datetime_format
mysql> SHOW VARIABLES LIKE 'date%_format';
+-----------------+-------------------+
| Variable_name | Value |
+-----------------+-------------------+
| date_format | %Y-%m-%d |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
まず、それらはサーバー側であり、動的ではありません (実行時に設定することはできません)。しかし、もっと悪いのは、それらが実際に使用されたことがないということです。これらの変数は、日付形式にまったく影響を与えませんでした。それらは現在非推奨であり、削除のためにキューに入れられています。
要約すると、いいえ、できません。日付形式は固定です。
他の人がそれは不可能だと説明しているように、これは代替ソリューションです。少し調整が必要ですが、日付列のように機能します。
どうすればフォーマットを可能にできるかを考え始めました。私はアイデアを得ました。そのきっかけを作るのはどうですか?つまり、 type の列を追加char
し、MySQL トリガーを使用してその列を更新します。そして、それはうまくいきました!トリガーに関連するいくつかの調査を行い、最終的にこれらのクエリを思いつきました。
CREATE TRIGGER timestampper BEFORE INSERT ON table
FOR EACH
ROW SET NEW.timestamp = DATE_FORMAT(NOW(), '%d/%m/%Y');
CREATE TRIGGER timestampper2 BEFORE UPDATE ON table
FOR EACH
ROW SET NEW.timestamp = DATE_FORMAT(NOW(), '%d/%m/%Y');
TIMESTAMP
またはを列の型として使用することはできませんDATE
。これらには独自の形式があり、自動的に更新されるためです。
だから、ここに代替のタイムスタンプまたは日付の代替があります! これが役に立てば幸いです。少なくとも、これが機能したことをうれしく思います。
試すecho date('d/m/Y', strtotime($date));
これにより、既存の日付が取得され、UNIX 時間に変換され、必要な形式の日付に変換されます。