私は、古いものから多くの不一致があるWebアプリケーションを再構築しています。すべてのデータを古いデータベースから新しい構造に移行する必要があります。非形式的な日付間の変換(スラッシュ/ダッシュに変更)
古いデータベースでは、日付はVARCHAR
としてMySQL DBに保存されました。 私たちはイギリスを拠点としているので、日付はDD/MM/YYYYの形式で書かれています。これらの日付をMySQLのネイティブDATE()
形式に変換する必要があります。
問題はこれです - 彼らは「ヨーロッパの」フォーマットされていると仮定すると-
軍PHP - PHPの彼らはもともと/
ではなく-
で分割されたため、日付が(MM/DD/YYYY「)アメリカの」形式であると仮定するとデフォルト。
私はそれらを変換するために、これまでにこれをやっている:$query->row('startdate')
日付を格納した古いデータベース内の列です
$start_date = date('Y-m-d', strtotime($query->row('startdate')));
。問題は、最初にすべて21/03/1994
を21-03-1994
に切り替える必要があります。
どうすればいいですか?このような
最初にデータベース内でVARCHARデータを正規化してから、フィールド型をDATEフィールドに変換すると完了です。 IMHOのためにPHPを使用する必要はありません。 – hakre
ありがとう@hakre - これは、私たちがフォーマットして再挿入する必要がある膨大な量の小さなチャンクであり、これは比較的重要でないものの壮大なスキームである。私たちは、PHPスクリプトのコレクションを使って約50のテーブルを移行しています。これはフォーマットに問題があります。面白いことに、他の場所に保存されている他の日付は、テキストとしても書式設定されています(スタッフは「次の金曜日」(!)を入力しました)、あるいは0000-00-00というテーブル全体... – Jack
次に、各形式を検出します。 '%d /%d /%d /'が使われていること、 'DD/MM/YYYY'であることだけをどう知っていますか?最初に何が意味を持つのかを検出し、変換する必要があります。 PHPでこれを行うのは大丈夫でしょうが、すでに束を処理することができたら、おそらく2段階の戦略があなたの場合にはまだ有効です。自分のコード=自分のバグ。あなたが既存のツールに固執する限り、それは最も頻繁に最善の第一選択です。後で詳細を遅らせてください。また、http://dev.mysql.com/doc/refman/5.1/en/regexp.htmlを参照してください。 – hakre