2010-11-23 10 views
4

フィールドに格納されている日付のフォーマットが2つあり、mm/dd/yyにあるものと新しいものがyyyy/mm/ddになるようなテーブルに取り組んでいます。mysqlの日付書式を更新する

私はこの

UPDATE table 
    SET date_field = DATE_FORMAT(date_field, '%Y/%m/%d') 
WHERE date_field = DATE_FORMAT(date_field, '%m/%d/%y') 

のようなクエリを実行したい。しかし、それだけでアウトに動作していません。私が得た1つの結果は、単に%mデータを取り出して%Yにして、実際にデータを混乱させるということでした。

どのような考えですか?

+1

date_fieldの列の種類は何ですか?もしそれが日付かタイムスタンプならYmdをmydに並べ替えることはできません – Mikhail

答えて

13

DATE_FORMATではなくSTR_TO_DATE関数を使用します。プラス、私はあなただけmisformed日付を更新したいと仮定し、私はあなたがこれを行うことができると思います:

UPDATE your_table 
SET date_field = DATE(STR_TO_DATE(date_field, '%m/%d/%Y')) 
WHERE DATE(STR_TO_DATE(date_field, '%m/%d/%Y')) <> '0000-00-00'; 

P.S.をテーブルにはカラムが含まれていますが、フィールドは含まれていません。日付を保持する文字列型は使用しないでください。日付型は

+0

ありがとうございました。それから、残りのサイトをまっすぐに進めることができます。 ASPからPHP、そしてMS SQLをMySQLに移行しました!それがまだ立っていることは驚くべきことです!ハ! –

4

STR_TO_DATEを使用して、間違った文字列を最初に実際の日付オブジェクトに変換し、次にDATE_FORMATを使用して、希望の形式の文字列に戻します。

また、あなたのWHERE条件は、そのようには機能しません。 LIKEを使って間違った形式の文字列を探しているはずです。

UPDATE your_table SET date_field = 
    DATE_FORMAT(STR_TO_DATE(date_field, '%m/%d/%y'), '%Y/%m/%d') 
WHERE date_field LIKE '__/__/____' 
+0

ありがとうございました –

1

です。はいああ、実際には3:

  • はホイールを改革しないでください。はい、はい、私が知っているのは、何百万もの人々が以前に発明したもの(嫌なことは意図していません)を最初からやってみるのが魅力的ですが、MySQLは良い、効率的で使い勝手の良いDATEフォーマットを持っています。入力/出力に対してのみ書式設定を行います。これにより、データ(日付自体)とプレゼンテーション(日付形式)の混在を避けることができます。一般的なケースでは、はすでに変換から変換されていないY/M/Dを伝えるために何フールプルーフな方法がありません - データについては

  • 、既知の適切なバックアップを(?あなたは右、バックアップを持っている)を復元m/d/yと実際の目的のために日付はf *** edです。 (特に2010年にはありません。たとえば、08/10/09は有効な日付をいくつか意味します)。

  • また、2桁の日付のみを格納するのはどのような考えですか?それはちょうどY2Kだった時間とお金のシンクをもたらしたちょうど近視眼的なペニー・ピンチングのようなものです。 (日付を保存する場合は避けてください。日付形式にしてください)。

関連する問題