1

外部ソースからのデータが取り込まれたテーブルがあります。問題は、同じ列に対して 2 つの異なる形式の日付を取得していることです。形式にいくつかのレコードと'%Y-%m-%d %H:%i'形式に他のレコードが'%Y-%d-%m %H:%i%s'あり、それらはすべてVARCHAR型です。

文字列型の日付フィールドを日付/日時フィールドに変換する方法は知っていますが、日付のずれをどのように処理すればよいですか? 個々の形式に基づいて日付を更新することは可能ですか?更新WHEREが行われる条件を適用できるWHERE date_fieldのは'%Y-%m-%d %H:%i'形式のみであり、別のクエリを使用して日付フィールドを'%Y-%d-%m %H:%i%s'形式で更新することはできますか?

現在、一般的なクエリでテーブルを更新しようとすると、フォーマットに一致しないフィールドでエラーが発生します。

UPDATE my_table 
SET my_date_field = STR_TO_DATE(my_date_field,'%Y-%m-%d %H:%i:%s');

応答: エラー コード: 1411。日時の値が正しくありません: 関数 str_to_date の「10-22-12 15:00」

UPDATE my_table 
SET my_date_field = STR_TO_DATE(my_date_field,'%Y-%d-%m %H:%i');

応答: エラー コード: 1292。切り捨てられた不正な日時値: '2010-01-01 00:00:00'

4

2 に答える 2

5

この値10-22-12 15:00には、使用する必要があります。%y-%d-%m %H:%i

の間2010-01-01 00:00:00、それはあるべきです%Y-%m-%d %H:%i:%s

あなたのクエリはCASE

UPDATE my_table 
SET my_date_field = (CASE WHEN CHAR_LENGTH(my_date_field) = 14 
                          THEN STR_TO_DATE(my_date_field,'%y-%d-%m %H:%i')
                          ELSE STR_TO_DATE(my_date_field,'%Y-%m-%d %H:%i:%s')
                      END)

その他のソース

于 2012-11-29T15:51:05.317 に答える
0

その列にデータがあり、それが異なるタイプである場合、テーブル列を更新できないため、そのように更新することはできません。そのため、列を削除するか、テーブルを確認して置換または更新できる手順を作成する必要があります.

于 2012-11-29T15:55:24.023 に答える