如何仅使用 mysql 更新日期时间字段的日期

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21016662/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 19:47:47  来源:igfitidea点击:

How can i update date of datetime field with mysql only

mysqlsqldatedatetimesql-update

提问by Muhammad Raheel

I have a table like this

我有一张这样的桌子

| ID |         DATE              | DURATION |     STATUS | DUPLICATION |
|----|------------------- -------|----------|------------|-------------|
|  1 | January, 08 2014 19:30:12 | 00:00:03 |    Aborted |      (null) |
|  2 | January, 08 2014 19:30:12 | 00:00:06 |    Dropped |      (null) |
|  3 | January, 08 2014 05:25:11 | 00:00:20 |  Connected |    Multiple |
|  4 | January, 08 2014 05:19:21 | 00:00:21 |  Connected |      Repeat |
|  5 | January, 08 2014 05:12:56 | 00:00:20 |  Connected |      Unique |
|  6 | January, 08 2014 04:46:56 | 00:00:41 | Unanswered |    Multiple |
|  7 | January, 08 2014 04:42:56 | 00:00:35 | Unanswered |      Repeat |
|  8 | January, 08 2014 04:34:56 | 00:00:31 | Unanswered |      Unique |
|  9 | January, 09 2014 12:06:32 | 00:00:06 |    Dropped |      (null) |
| 10 | January, 09 2014 12:06:32 | 00:00:03 |    Aborted |      (null) |
| 11 | January, 09 2014 05:25:11 | 00:00:20 |  Connected |    Multiple |
| 12 | January, 09 2014 05:19:21 | 00:00:21 |  Connected |      Repeat |
| 13 | January, 09 2014 05:12:56 | 00:00:20 |  Connected |      Unique |
| 14 | January, 09 2014 04:46:56 | 00:00:41 | Unanswered |    Multiple |
| 15 | January, 09 2014 04:42:56 | 00:00:35 | Unanswered |      Repeat |
| 16 | January, 09 2014 04:34:56 | 00:00:31 | Unanswered |      Unique |
| 17 | January, 09 2014 12:19:01 | 00:00:20 |    Aborted |      (null) |
| 18 | January, 09 2014 12:19:01 | 00:00:19 |  Connected |      Repeat |
| 19 | January, 09 2014 12:15:30 | 00:00:20 |    Aborted |      (null) |
| 20 | January, 09 2014 12:15:30 | 00:00:19 |  Connected |      Unique |
| 21 | January, 09 2014 07:25:11 | 00:00:41 |  Connected |    Multiple |
| 22 | January, 09 2014 07:19:21 | 00:00:27 |  Connected |      Repeat |
| 23 | January, 09 2014 07:12:56 | 00:00:20 |  Connected |      Unique |
| 24 | January, 09 2014 06:46:56 | 00:00:32 | Unanswered |      Unique |
| 25 | January, 09 2014 06:42:56 | 00:00:29 |    Aborted |      (null) |
| 26 | January, 09 2014 06:34:56 | 00:00:27 |    Aborted |      (null) |
| 27 | January, 09 2014 05:34:56 | 00:00:27 |    Aborted |      (null) |
| 28 | January, 09 2014 05:25:11 | 00:00:41 |  Connected |    Multiple |
| 29 | January, 09 2014 05:19:21 | 00:00:27 |  Connected |      Repeat |
| 30 | January, 09 2014 05:12:56 | 00:00:20 |  Connected |      Unique |

I want to update only the date but dont know where to start from. I mean in the datetime field datei want to update the date '2014-01-08' to '2014-01-01'. How can i do that? I have tried this.

我只想更新日期但不知道从哪里开始。我的意思是在日期时间字段中,date我想将日期“2014-01-08”更新为“2014-01-01”。我怎样才能做到这一点?我试过这个。

UPDATE calldate cd
INNER JOIN calldate cdl ON cdl.id = cd.id
SET cd.date = ''/*Dont know what to do here */
WHERE DATE(cd.date) = '2014-01-08'

Here is the

这里是

Fiddle Structure

小提琴结构

回答by Aziz Shaikh

One option is to use this:

一种选择是使用这个:

UPDATE `calldata`
SET `date` = DATE_SUB(`date`, INTERVAL 7 DAY)
WHERE DATE(`date`) = '2014-01-08'

Fiddle: http://sqlfiddle.com/#!2/28d71/1

小提琴:http://sqlfiddle.com/#!2/28d71/1

For better performance use the following query because index (if any) can be used by MySQL as DATE()is not on the left side of comparison operator:

为了获得更好的性能,请使用以下查询,因为 MySQL 可以使用索引(如果有),因为DATE()它不在比较运算符的左侧:

UPDATE `calldata`
SET `date` = DATE_SUB(`date`, INTERVAL 7 DAY)
WHERE `date` >= '2014-01-08'
AND `date` < '2014-01-09

Fiddle: http://sqlfiddle.com/#!2/7e7b2/1

小提琴:http://sqlfiddle.com/#!2/7e7b2/1

回答by Saharsh Shah

Try this:

尝试这个:

UPDATE calldata
SET date = CONCAT('2014-01-01 ', TIME(date))
WHERE DATE(date) = '2014-01-08'

Check the SQL FIDDLE DEMO

检查SQL FIDDLE 演示

OUTPUT

输出

| ID |                           DATE |                       DURATION |     STATUS | DUPLICATION |
|----|--------------------------------|--------------------------------|------------|-------------|
|  1 | January, 01 2014 19:30:12+0000 | January, 01 1970 00:00:03+0000 |    Aborted |      (null) |
|  2 | January, 01 2014 19:30:12+0000 | January, 01 1970 00:00:06+0000 |    Dropped |      (null) |
|  3 | January, 01 2014 05:25:11+0000 | January, 01 1970 00:00:20+0000 |  Connected |    Multiple |
|  4 | January, 01 2014 05:19:21+0000 | January, 01 1970 00:00:21+0000 |  Connected |      Repeat |
|  5 | January, 01 2014 05:12:56+0000 | January, 01 1970 00:00:20+0000 |  Connected |      Unique |
|  6 | January, 01 2014 04:46:56+0000 | January, 01 1970 00:00:41+0000 | Unanswered |    Multiple |
|  7 | January, 01 2014 04:42:56+0000 | January, 01 1970 00:00:35+0000 | Unanswered |      Repeat |
|  8 | January, 01 2014 04:34:56+0000 | January, 01 1970 00:00:31+0000 | Unanswered |      Unique |
|  9 | January, 09 2014 12:06:32+0000 | January, 01 1970 00:00:06+0000 |    Dropped |      (null) |
| 10 | January, 09 2014 12:06:32+0000 | January, 01 1970 00:00:03+0000 |    Aborted |      (null) |
| 11 | January, 09 2014 05:25:11+0000 | January, 01 1970 00:00:20+0000 |  Connected |    Multiple |
| 12 | January, 09 2014 05:19:21+0000 | January, 01 1970 00:00:21+0000 |  Connected |      Repeat |
| 13 | January, 09 2014 05:12:56+0000 | January, 01 1970 00:00:20+0000 |  Connected |      Unique |
| 14 | January, 09 2014 04:46:56+0000 | January, 01 1970 00:00:41+0000 | Unanswered |    Multiple |
| 15 | January, 09 2014 04:42:56+0000 | January, 01 1970 00:00:35+0000 | Unanswered |      Repeat |
| 16 | January, 09 2014 04:34:56+0000 | January, 01 1970 00:00:31+0000 | Unanswered |      Unique |
| 17 | January, 09 2014 12:19:01+0000 | January, 01 1970 00:00:20+0000 |    Aborted |      (null) |
| 18 | January, 09 2014 12:19:01+0000 | January, 01 1970 00:00:19+0000 |  Connected |      Repeat |
| 19 | January, 09 2014 12:15:30+0000 | January, 01 1970 00:00:20+0000 |    Aborted |      (null) |
| 20 | January, 09 2014 12:15:30+0000 | January, 01 1970 00:00:19+0000 |  Connected |      Unique |
| 21 | January, 09 2014 07:25:11+0000 | January, 01 1970 00:00:41+0000 |  Connected |    Multiple |
| 22 | January, 09 2014 07:19:21+0000 | January, 01 1970 00:00:27+0000 |  Connected |      Repeat |
| 23 | January, 09 2014 07:12:56+0000 | January, 01 1970 00:00:20+0000 |  Connected |      Unique |
| 24 | January, 09 2014 06:46:56+0000 | January, 01 1970 00:00:32+0000 | Unanswered |      Unique |
| 25 | January, 09 2014 06:42:56+0000 | January, 01 1970 00:00:29+0000 |    Aborted |      (null) |
| 26 | January, 09 2014 06:34:56+0000 | January, 01 1970 00:00:27+0000 |    Aborted |      (null) |
| 27 | January, 09 2014 05:34:56+0000 | January, 01 1970 00:00:27+0000 |    Aborted |      (null) |
| 28 | January, 09 2014 05:25:11+0000 | January, 01 1970 00:00:41+0000 |  Connected |    Multiple |
| 29 | January, 09 2014 05:19:21+0000 | January, 01 1970 00:00:27+0000 |  Connected |      Repeat |
| 30 | January, 09 2014 05:12:56+0000 | January, 01 1970 00:00:20+0000 |  Connected |      Unique |

回答by juergen d

UPDATE calldata
SET date = '2014-01-01'
WHERE DATE(date) = '2014-01-08'

SQLFiddle demo

SQLFiddle 演示

回答by Seshidhar G

UPDATE calldata SET date = '2014-01-01' WHERE DATE(date) = '2014-01-01' 

and

UPDATE calldata SET date = '2014-01-01' WHERE date = '2014-01-01'

two cases will work without any issue and in my case date is of type datetime.

两种情况都可以正常工作,在我的情况下,日期是日期时间类型。