mysqlについての質問です。


現在、created というカラムに、datetime 型にて以下のような日時が登録されています。
これの、西暦と月だけを変更したいのですが、どのようなsqlを実行すれば良いでしょうか?

2009-04-03 20:43:31

2010-03-03 20:43:31

update customers set created = '2010-03'

みたいなことをしたいのですが、実行すると 0000-00-00 となってしまいます。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/03/19 13:04:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:onishi No.1

回答回数31ベストアンサー獲得回数5

ポイント35pt

特定の期間ずらしたいなら

UPDATE customers SET created = DATE_ADD(created, INTERVAL 11 MONTH);

もしくは文字列置換で

UPDATE customers SET created = REPLACE(created, '2009-04', '2010-03');

期間でなく変更後の値が固定なら

UPDATE customers SET created = CONCAT('2010-03', SUBSTRING(created, 8,12));

というのはどうでしょう。

id:yamamoton3

1番のでOKでした!

ありがとうございます。

2010/03/19 13:03:23

その他の回答1件)

id:onishi No.1

回答回数31ベストアンサー獲得回数5ここでベストアンサー

ポイント35pt

特定の期間ずらしたいなら

UPDATE customers SET created = DATE_ADD(created, INTERVAL 11 MONTH);

もしくは文字列置換で

UPDATE customers SET created = REPLACE(created, '2009-04', '2010-03');

期間でなく変更後の値が固定なら

UPDATE customers SET created = CONCAT('2010-03', SUBSTRING(created, 8,12));

というのはどうでしょう。

id:yamamoton3

1番のでOKでした!

ありがとうございます。

2010/03/19 13:03:23
id:Km1967 No.2

回答回数224ベストアンサー獲得回数35

ポイント35pt

13ヶ月先であるなら下記ではどうか?

update customers set created = created + INTERVAL 13 MONTH
  • id:taknt
    確認ができないので やり方だけ

    まず DATE_FORMATで 日、時刻を取得
    それに 年と 月を つけて 日付型にして update
  • id:taknt
    これって 31日とかだと セットできない月があるよね。
  • id:onishi
    たしかに文字列操作だとありえない日で 0000-00-00 00:00:00 とかになりますね・・・ご指摘ありがとうございます。
    質問者さんはDATE_ADDでOKだったそうなのでよかったです。
  • id:taknt
    何を求めてるかによって違いますからねぇ。

    DATE_ADDだったら エラーは出ないけど、違う 年月になりうる可能性があるからねぇ。
  • id:Km1967
    id:taknt さん > 違う年月になりうる可能性

    DATE_ADDを使うべきか使わざるべきかはおいておくが、
    INTERVAL n MONTH だから大の月から小の月になる場合のみ違う日になる可能性をはらんでおるが、年月は違わんはずだぞ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません