MySQL中怎么操作日期和时间

82次阅读
没有评论

共计 3995 个字符,预计需要花费 10 分钟才能阅读完成。

今天就跟大家聊聊有关 MySQL 中怎么操作日期和时间,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

日期和时间函数对建立一个站点是非常有用的。站点的主人往往对一个表中的数据何时被更新感兴趣。通过日期和时间函数,你可以在秒级跟踪一个表的改变。

日期和时间类型是 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。这些的每一个都有合法值的一个范围,而“零”当你指定确实不合法的值时被使用。注意,MySQL 允许你存储某个“不严格地”合法的日期值,例如 1999-11-31,原因我们认为它是应用程序的责任来处理日期检查,而不是 SQL 服务器。为了使日期检查更“快”,MySQL 仅检查月份在 0 -12 的范围,天在 0 -31 的范围。上述范围这样被定义是因为 MySQL 允许你在一个 DATE 或 DATETIME 列中存储日期,这里的天或月是零。这对存储你不知道准确的日期的一个生日的应用程序来说是极其有用的,在这种情况下,你简单地存储日期象 1999-00-00 或 1999-01-00。(当然你不能期望从函数如 DATE_SUB() 或 DATE_ADD() 得到类似以这些日期的正确值)。

返回当前日期和时间

通过函数 GETDATE(),你可以获得当前的日期和时间。例如,

CURDATE() 返回当前日期

CURRENT_DATE

以 YYYY-MM-DD 或 YYYYMMDD 格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。

select CURDATE();

+————+

| CURDATE()  |

+————+

| 2001-02-20 |

+————+

mysql select CURDATE() + 0;

+————-+

| CURDATE()+0 |

+————-+

|  20010220 |

+————-+

CURTIME() 返回当前时间

以 HH:MM:SS 或 HHMMSS 格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。

mysql select CURTIME();

+———–+

| CURTIME() |

+———–+

| 10:42:38  |

+———–+

mysql select CURTIME() + 0;

+————-+

| CURTIME()+0 |

+————-+

|  104525 |

+————-+

NOW() 返回当前时期和时间

NOW() 以 YYYY-MM-DD HH:MM:SS 的格式或者 YYYYMMDDHHMMSS 的格式返回日期和时间值,取决于上下文。

mysql select now();

+———————+

| now()  |

+———————+

| 2001-02-20 10:45:57 |

+———————+

mysql select now()+0;

+—————-+

| now()+0  |

+—————-+

| 20010220105635 |

+—————-+

这些得到当前日期和时间的函数,对于日期和时间的计算很方便,尤其是计算一个时间到现在的时间差。例如,在 pet 表中,我们以天为单位计算宠物的年龄:

mysql SELECT name,CURDATE()-birth FROM pet;

+———-+—————–+

| name  | CURDATE()-birth |

+———-+—————–+

| Fluffy  |  80016 |

| Claws  |  69903 |

| Buffy  |  119707 |

| Chirpy  |  29309 |

| Fang  |  109393 |

| Bowser  |  109389 |

| Whistler |  39011 |

| Slim  |  49791 |

| Puffball |  19890 |

+———-+—————–+

  自动记录数据的改变时间

TIMESTAMP 列类型提供一种类型,TIMESTAMP 值可以从 1970 的某时的开始一直到 2037 年,精度为一秒,其值作为数字显示。你可以使用它自动地用当前的日期和时间标记 INSERT 或 UPDATE 的操作。如果你有多个 TIMESTAMP 列,只有第一个自动更新。

自动更新第一个 TIMESTAMP 列在下列任何条件下发生:

列没有明确地在一个 INSERT 或 LOAD DATA INFILE 语句中指定。

列没有明确地在一个 UPDATE 语句中指定且一些另外的列改变值。(注意一个 UPDATE 设置一个列为它已经有的值,这将不引起 TIMESTAMP 列被更新,因为如果你设置一个列为它当前的值,MySQL 为了效率而忽略更改。)

你明确地设定 TIMESTAMP 列为 NULL.

除第一个以外的 TIMESTAMP 列也可以设置到当前的日期和时间,只要将列设为 NULL,或 NOW()。

例如,创建如下的表:

mysql CREATE TABLE student
– (
– id int,
– name char(16),
– english tinyint,
– chinese tinyint,
– history tinyint,
– time timestamp

向表中插入记录,可以查看效果:

mysql INSERT student(id,name,englisht,Chinese,history) VALUES(11,”Tom”,66,93,67);

查看记录的存储情况:

mysql SELECT * FROM student;

+——+———+———+———+———+—————-+

| id  | name  | english | chinese | history | time  |

+——+———+———+———+———+—————-+

|  11 | Tom  |  66 |  93 |  67 | 20010220123335 |

+——+———+———+———+———+—————-+

你可以看到 time 列纪录下了数据录入时的时间值。如果你更新改记录,在查看操作的结果:

mysql UPDATE student SET english=76 WHERE id=11;
mysql SELECT * FROM student;

+——+——+———+———+———+—————-+

| id  | name | english | chinese | history | time  |

+——+——+———+———+———+—————-+

|  11 | Tom  |  76 |  93 |  67 | 20010220125736 |

+——+——+———+———+———+—————-+

可以清楚的看到,time 列的时间被自动更改为修改记录的时间。

有时候你希望不更改任何值,也能打到修改 TIMESTAMP 列的值,这时只要设置该列的值为 NULL,MySQL 就可以自动更新 TIMESTAMP 列的值:

mysql UPDATE student SET time=NULL WHERE id=11;

mysql select * from student where id=11;

+——+——+———+———+———+—————-+

| id  | name | english | chinese | history | time  |

+——+——+———+———+———+—————-+

|  11 | Tom  |  76 |  93 |  67 | 20010220130517 |

+——+——+———+———+———+—————-+

通过明确地设置希望的值,你可以设置任何 TIMESTAMP 列为不同于当前日期和时间的值,即使对第一个 TIMESTAMP 列也是这样。例如,如果,当你创建一个行时,你想要一个 TIMESTAMP 被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,你可以使用这样使用:

让 MySQL 在行被创建时设置列,这将初始化它为当前的日期和时间。

当你执行随后的对该行中其他列的更改时,明确设定 TIMESTAMP 列为它的当前值。

例如,当你在修改列时,可以把原有的值付给 TIMESTAMP 列:

mysql UPDATE student SET english=66,time=time WHERE id=11;
mysql select * from student where id=11;

+——+——+———+———+———+—————-+

| id  | name | english | chinese | history | time  |

+——+——+———+———+———+—————-+

|  11 | Tom  |  66 |  nb

看完上述内容,你们对 MySQL 中怎么操作日期和时间有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计3995字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)