How can I update date of datetime field with mysql only?

66,373

Solution 1

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

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:

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

Solution 2

Try this:

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

Check the SQL FIDDLE DEMO

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 |

Solution 3

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

SQLFiddle demo

Share:
66,373
Muhammad Raheel
Author by

Muhammad Raheel

My Website My Wordpress Blog My Personal Website LinkedIn Stackoverflow Server Side Languages PHP , ASP.Net PHP Frameworks Laravel , Codeigniter , CakePHP Content Managment Systems Halogy , PyroCMS , Wordpress Databases MySQL Scripts Language Javascript Librararies JQuery , JQuery Mobile UI Libraries and Frameworks BackboneJs , knockoutJs , pagerjs , DurandalJs Other Javascript Utilities JQuery UI , RequireJs , NodeJs Designing HTML , HTML5 , CSS Other JSON , XML , AJAX Simply i like programming in Codeigniter and Laravel frameworks. I like challanging questions of MySQL and really appreciate those from whom i can learn anything. "Why have you come here? I dont want to impress you because i haven't been sent to impress you. Go away!" profile for raheel shan on Stack Exchange, a network of free, community-driven Q&amp;A sites http://stackexchange.com/users/flair/367149.png Quick Glance on Skills Skills | Items --------------------------------------------------------- Languages |PHP , ASP Frameworks |Laravel , Codeigniter , CakePHP CMS |Halogy , PyroCMS , Wordpress Databases |MySQL Scripts Lng |Javascript , JQuery(Lib) Utilities |Backbone.js ,knockout.js ,pager.js ,Durandal.js Designing |HTML 5 , CSS 3 Other |JSON , XML , JQuery , AMFPhp , AJAX , SQL

Updated on July 12, 2022

Comments

  • Muhammad Raheel
    Muhammad Raheel almost 2 years

    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 date i want to update the date '2014-01-08' to '2014-01-01'. How can i do that? I have tried this.

    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

  • Muhammad Raheel
    Muhammad Raheel over 10 years
    I have tried this. This is not updating somehow and i am unable to understand why?
  • MrYo
    MrYo over 8 years
    It does!! @raheelshan