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回まで
  • 13歳以上
  • 登録:2010/03/19 11:53:59
  • 終了:2010/03/19 13:04:35

ベストアンサー

id:onishi No.1

onishi回答回数30ベストアンサー獲得回数52010/03/19 12:05:18

ポイント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

onishi回答回数30ベストアンサー獲得回数52010/03/19 12:05:18ここでベストアンサー

ポイント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

Km1967回答回数224ベストアンサー獲得回数352010/03/19 12:11:10

ポイント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 だから大の月から小の月になる場合のみ違う日になる可能性をはらんでおるが、年月は違わんはずだぞ。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません