返回顶部
首页 > 资讯 > 数据库 >MySQL中datetime、date、time、str之间如何转化
  • 726
分享到

MySQL中datetime、date、time、str之间如何转化

2024-04-02 19:04:59 726人浏览 泡泡鱼
摘要

这篇文章主要介绍“Mysql中datetime、date、time、str之间如何转化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql中datetime、d

这篇文章主要介绍“Mysql中datetime、date、time、str之间如何转化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql中datetime、date、time、str之间如何转化”文章能帮助大家解决问题。

datetime、date、time、str之间的转化与比较

SELECT NOW(),CURDATE(),CURTIME(),
  -- datetime 转 date time
  NOW(), DATE(NOW()), TIME (NOW()), CONCAT(DATE(NOW()), ' ', TIME (NOW())),
  -- str 转 datetime date time
  str_to_date('2019-04-25 08:50:00', '%Y-%m-%d %H:%i:%s'),DATE('2019-04-25 08:50:00'),TIME ('2019-04-25 08:50:00'),
  str_to_date('2019-04-25 08:50:00', '%Y-%m-%d %T'),
  -- 比较
  NOW() = CONCAT(DATE(NOW()), ' ', TIME (NOW())),
  DATE(NOW()) = '2019-04-25',
  NOW() = DATE(NOW()),
  NOW() = TIME (NOW());
 
-- 获取当前时间的函数
select CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME;	-- 当前时间
select CURRENT_TIMESTAMP(), CURRENT_DATE(), CURRENT_TIME(), CURDATE(), CURTIME();	-- 当前时间
select now(), sysdate(), SLEEP(3), now(), sysdate();	-- 当前时间
select UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME();	-- UTC时间
select UNIX_TIMESTAMP(), UNIX_TIMESTAMP(now());-- 函数返回连接当前时区内的值(时间戳)
select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i:%s'); -- 时间戳格式化
select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s'); -- 时间格式化

-- ----------------- 补充日期操作

-- 加1天
select DATE_ADD(now(),INTERVAL 1 DAY), DATE_SUB(now(),INTERVAL -1 DAY);
-- 复合型:加1年1月
select DATE_ADD(now(),INTERVAL '1 1' YEAR_MONTH), DATE_SUB(now(),INTERVAL '-1 -1' YEAR_MONTH);
-- 加1天2时3分4秒
select DATE_ADD('2020-12-23 00:00:00',INTERVAL '1 2:3:4' DAY_SECOND),DATE_SUB('2020-12-23 00:00:00',INTERVAL '-1 -2:-3:-4' DAY_SECOND);


-- 查询两个日期间的差值(单位秒)
select TIMESTAMPDIFF(SECOND,'2020-12-01 00:00:00','2020-12-01 01:01:01');

Mysql日期和时间数据类型(DATE、TIME、 DATETIME、 TIMESTAMP和YEAR

本文基于MySQL 5.7版本。

MySQL中表示时间值的日期和时间数据类型有以下五个:

(1)DATE

(2)TIME

(3)DATETIME

(4)TIMESTAMP

(5)YEAR

日期和时间数据类型语法

MySQL允许对TIME、DATETIME和TIMESTAMP使用小数秒,精度最高可达微秒(6位小数)。要定义包含小数秒日期和时间数据类型的列,使用

type_name(fsp),

其中type_name是TIME、DATETIME或TIMESTAMP,而fsp是小数秒精度,fsp的值,如果给定,必须在0 ~ 6之间。值为0表示没有小数部分。如果省略,默认精度为0。

例如:

CREATE TABLE date_time_test (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));

Date

支持的范围 '1000-01-01' to '9999-12-31',MySQL以'YYYY-MM-DD'格式显示Date类型,但允许使用字符串或数字将值赋给DATE列。字面常量转换规则如下:

(1)格式为'YYYY-MM-DD'或'YY-MM-DD'的字符串。任何标点字符都可以用作日期部分之间的分隔符。例如,'2012-12-31'、'2012/12/31'、'2012^12^31'和'2012@12@31'是等价的。

(2)格式为'YYYYMMDD'或'YYMMDD'的没有分隔符的字符串,只要该字符串具有日期的意义。例如,'20070523'和'070523'被解释为'2007-05-23',但'071332'是非法的(它有无意义的月和日部分),会变成'0000-00-00'。

(3)作为YYYYMMDD或YYMMDD格式的数字,只要该数字作为日期有意义。例如,19830905和830905被解释为“1983-09-05”。

DATETIME和DATETIME(fsp)

DATETIME类型是Date和Time的组合。支持的范围从'1000-01-01 00:00:00.000000' 到'9999-12-31 23:59:59.999999'。MySQL以'YYYY-MM-DD hh:mm:ss[.fraction]'的格式显示DATETIME类型。但允许使用字符串或数字向DATETIME列赋值。字面常量转换规则如下:

表中的任何TIMESTAMP或DATETIME列都可以具有自动初始化和更新属性。

(1)格式为“YYYY-MM-DD hh:mm:ss”或“YY-MM-DD hh:mm:ss”字符串。任何标点字符都可以用作日期部分或时间部分之间的分隔符。例如,'2012-12-31 11:30:45'、'2012^12^31 11+30+45'、'2012/12/31 11*30*45'和'2012@12@31 11^30^45'是等价的。

(2)在日期和时间部分和小数秒部分之间识别的唯一分隔符是小数点。

(3)日期和时间部分可以用T而不是空格分隔。例如,'2012-12-31 11:30:45' '2012-12-31 t11:30:45 '是等价的。

(4)格式为'YYYYMMDDhhmmss'或'YYMMDDhhmmss'无分隔符的字符串,只要该字符串具有日期的意义。例如,'20070523091528'和'070523091528'被解释为'2007-05-23 09:15:28',但'071122129015'是非法的(它有一个无意义的分钟部分),会变成'0000-00-00 00:00:00'。

(5)YYYYMMDDhhmmss或YYMMDDhhmmss格式的数字,只要该数字作为日期有意义。例如,19830905132800和830905132800被解释为“1983-09-05 13:28:00”。

TIMESTAMP和TIMESTAMP[(fsp)]

支持的范围'1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC(UTC指的是世界标准时间),TIMESTAMP值存储为自纪元('1970-01-01 00:00:00' UTC)以来的秒数,但是它不能表示'1970-01-01 00:00:00',因为这表示从纪元开始的0秒,值0保留用于表示“0000-00-00 00:00:00”,即“零”的TIMESTAMP值。TIMESTAMP的字面常量同DATETIME。

上面date_time_test表ts列是TIMESTAMP,一旦创建后,我们发现ts列默认值为当前TIMESTAMP,而且可自动更新为当前时间戳,如图:

支持的范围'1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC(UTC指的是世界标准时间),TIMESTAMP值存储为自纪元('1970-01-01 00:00:00' UTC)以来的秒数,但是它不能表示'1970-01-01 00:00:00',因为这表示从纪元开始的0秒,值0保留用于表示“0000-00-00 00:00:00”,即“零”的TIMESTAMP值。TIMESTAMP的字面常量同DATETIME。

上面date_time_test表ts列是TIMESTAMP,一旦创建后,我们发现ts列默认值为当前TIMESTAMP,而且可自动更新为当前时间戳,如图:

MySQL中datetime、date、time、str之间如何转化

向date_time_test表中插入一条数据,如下:

insert date_time_test(t) values('00:00:01');

登录后复制

查看数据,如图:

MySQL中datetime、date、time、str之间如何转化

发现ts列自动更新为插入数据时的时间戳。

更新当前数据,如图:

update date_time_test set t='00:00:02' where t='00:00:01';

登录后复制

再次查看时间戳,如图:

MySQL中datetime、date、time、str之间如何转化

ts列已经更新为当前时间戳。这和MySQL的系统变量explicit_defaults_for_timestamp有关,

show variables like 'explicit_defaults_for_timestamp';

登录后复制

如图:

MySQL中datetime、date、time、str之间如何转化

explicit_defaults_for_timestamp处于关闭状态,此时,插入数据时,如果ts没有指定值,会被初始化为默认值,更新数据时,ts列同时更新。 explicit_defaults_for_timestamp处于打开状态,不会被初始化为默认,也不具备自动更新为当前时间戳。也可以对TIMESTAMP和DATETIME如下显示定义默认值和自动更新:

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

TIME和TIME(fsp)

支持的范围'-838:59:59.000000' to '838:59:59.000000',MySQL以'hh:mm:ss[.fraction]'格式显示TIME,但允许使用字符串或数字向TIME列赋值。TIME类型这个时间范围表明它不仅可以表示一天的时间,也可以表示经过的时间或两个事件之间的时间间隔。字面常量转换规则如下:

(1)MySQL将带有冒号的TIME值缩写为一天中的时间,例如:'11:12'表示'11:12:00',而不是 '00:11:12';

(2)MySQL将没有冒号的TIME缩写值最右边的两个数字看成秒,例如:'1112'和1112都表示'00:11:12'

(3)在时间部分和小数秒部分之间识别的唯一分隔符是小数点;

(4)默认情况下,位于TIME范围之外但在其他方面有效的值将被裁剪到该范围中最近的端点。例如,'-850:00:00'和'850:00:00'会转换为'-838:59:59'和'838:59:59'。无效的TIME值将被转换为“00:00:00”。注意,由于'00:00:00'本身是一个有效的TIME值,因此无法从存储在表中的'00:00:00'值判断原始值是'00:00:00'还是无效的。

YEAR和YEAR(4)

支持的范围1901到2155,或者0000。MySQL以YYYY格式显示YEAR。但允许使用字符串或数字向YEAR列赋值。

SUM()和AVG()聚合函数不能处理时间值。要解决这个问题,请将其转换为数字,然后执行聚合操作,最后将其转换回时间值。例子:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;

YEAR接受如下格式的输入:

(1)4位字符串'1901' 到 '2155';

(2)4位数字1901 到 2155;

(3)1或者2位字符串'0' 到 '99',MySQL将'0'到'69'转化为2000到2069,将'70'到'99'转化为1970到1999;

(4)1或者2位数字0到 99,MySQL将1到69转换为YEAR值2001到2069,将70到99转化为YEAR值1970到1999,0转化为YEAR值0000。

注:

如果没有启用strict SQL模式,MySQL会将无效的YEAR值转换为0000。在严格SQL模式下,试图插入无效的YEAR值将产生错误。

总结如下:


DATETIMEDATETIMETIMESTAMPYEAR
取值范围

'1000-01-01'

'9999-12-31'

'-838:59:59.000000'

'838:59:59.000000'

'1000-01-01 00:00:00.000000' 到

'9999-12-31 23:59:59.999999'

'1970-01-01 00:00:01.000000' UTC to

'2038-01-19 03:14:07.999999' UTC

1901

2155

或者0000

小数位精度00~60~60~60
显示格式YYYY-MM-DDhh:mm:ss[.fraction]YYYY-MM-DD hh:mm:ss[.fraction]YYYY-MM-DD hh:mm:ss[.fraction]YYYY
赋值允许使用符合格式的字符串或数字赋值允许使用符合格式的字符串或数字赋值允许使用符合格式的字符串或数字赋值允许使用符合格式的字符串或数字赋值允许使用符合格式的字符串或数字赋值
小数位分隔符只识别小数点.只识别小数点.只识别小数点.
日期分隔符任何标点任何标点任何标点
时间分隔符任何标点任何标点任何标点
无效值处理(strict mode关闭状态)

转化为

0000-00-00

转化为

0000-00-00 00:00:00

转化为

0000-00-00 00:00:00

转换为

00:00:00

转换为0000

关于“MySQL中datetime、date、time、str之间如何转化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网数据库频道,小编每天都会为大家更新不同的知识点。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中datetime、date、time、str之间如何转化

本文链接: https://lsjlt.com/news/74287.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中datetime、date、time、str之间如何转化
    这篇文章主要介绍“MySQL中datetime、date、time、str之间如何转化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中datetime、d...
    99+
    2024-04-02
  • MySQL中关于datetime、date、time、str之间的转化与比较
    目录datetime、date、time、str之间的转化与比较mysql日期和时间数据类型(DATE、TIME、 DATETIME、 TIMESTAMP和YEAR日期和时间数据类型语法datetime、date、tim...
    99+
    2024-04-02
  • Java中LocalDateTime/DateTime与Date相互转化(java中时间转化)
    1、LocalDateTime和Date为什么需要相互转化 LocalDateTime是JDK1.8出现的新特性,解决线程不安全的问题,但是当前很多的相关插件或者使用较低版本的时候,会依旧使用Date的情况,这个时候就需要两者之间的相互转化...
    99+
    2023-09-02
    java 开发语言 jvm
  • python常用时间库time、datetime与时间格式之间如何转换
    这篇“python常用时间库time、datetime与时间格式之间如何转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“p...
    99+
    2023-07-05
  • java中日期转换Date、DateTime、TimeStamp、String之间相互转换
    1.Date转String 1.1Date->String //date->String Date date = new Date(); String format = dateFormat.fo...
    99+
    2023-09-07
    java
  • 在 MySQL 中,我们如何将 TIME 和 DATETIME 值转换为数字形式?
    将TIME(N)和DATETIME(N)值转换为数字形式可以通过将0(+0)添加到它们来完成。以下是此类转换的规则 −转换为整数当N为0时,TIME(N)和DATETIME(N)值将被转换为整数。例如,CURTIME()和NOW()的值可以...
    99+
    2023-10-22
  • 如何在python中将datetime转换为时间戳
    这期内容当中小编将会给大家带来有关如何在python中将datetime转换为时间戳,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序...
    99+
    2023-06-14
  • pandas时间序列之如何将int转换成datetime格式
    目录将int转换成datetime格式原始时间格式pandas 时间数据处理转化时间类型生成时间序列提取时间属性计算时间间隔计算时间推移获取当前机器的支持的最大时间和最小时间将int...
    99+
    2024-04-02
  • MySQL中如何把时间戳转化成日期时间
    小编给大家分享一下MySQL中如何把时间戳转化成日期时间,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!FROM_UNIXTIME(unix_timestamp,f...
    99+
    2023-06-02
  • php如何进行数字和字母之间的转化
    今天小编给大家分享一下php如何进行数字和字母之间的转化的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。数字和字母进行相互转化...
    99+
    2023-06-30
  • 如何将WMI中的DateTime类型转换成VBS时间的函数代码
    这篇文章将为大家详细讲解有关如何将WMI中的DateTime类型转换成VBS时间的函数代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。有两种方法可以转换,一种是自己写个函数解析: 复制代码 代码如下:F...
    99+
    2023-06-08
  • php中的时间函数(如何设置时区有4种方法)------与时间相关的函数 (time、date、m‘ktime、microtime(true)、strtotime)
    如何设置时区:服务器默认的时间都是国家统一时间格林威治,所以在使用服务器前需要设置当前服务器的时区位于用于指定的时区。  设置时区: 找到php.ini文件,找到date.zonetime。 (1)date.zonetime = 大洲/城...
    99+
    2023-09-02
    服务器 运维 php
  • mysql中如何将日期转为时间戳
    本篇内容主要讲解“mysql中如何将日期转为时间戳”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql中如何将日期转为时间戳”吧! ...
    99+
    2024-04-02
  • mysql中如何优化表释放表空间
    目录mysql优化表释放表空间mysql空间释放查询占用空间大小清理碎片总结mysql优化表释放表空间 方法一:optimize table table_name 这是我们经常见到的...
    99+
    2023-02-18
    mysql优化表 释放表空间 mysql表空间
  • 如何实现Flex3中AS2和AS3之间事件转换
    这篇文章主要介绍如何实现Flex3中AS2和AS3之间事件转换,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!事件的转换AS3的事件与AS2有很大的不同,形势更统一,功能更强大。1.监听事件的方式(Handlingth...
    99+
    2023-06-17
  • MySQL 中如何计算两个时间值之间的差异?
    借助 TIMEDIFF() MySQL 函数,可以计算两个时间值之间的差异。示例mysql> Select TIMEDIFF('04:05:45','03:05:45') AS ‘Diffe...
    99+
    2023-10-22
  • 在PHP中如何将时间戳转化为日期和时间格式
    本篇内容介绍了“在PHP中如何将时间戳转化为日期和时间格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是时间戳时间戳是指自1970年1...
    99+
    2023-07-05
  • 如何进行Oracle中pivot与unpivot之间的相互转换
    如何进行Oracle中pivot与unpivot之间的相互转换,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 今天解答问题的总结 tabl...
    99+
    2024-04-02
  • R语言中Rcpp与Eigen库之间如何相互转换
    这篇文章将为大家详细讲解有关R语言中Rcpp与Eigen库之间如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当我们在使用Rcpp时,进行矩阵运算最简单的是使用Eigen库进行相关操作,可以很轻...
    99+
    2023-06-25
  • PHP和MySQL中如何将日期转换为时间戳
    这篇文章主要讲解了“PHP和MySQL中如何将日期转换为时间戳”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP和MySQL中如何将日期转换为时间戳”吧!PHP 中日期戳转时间戳在 PHP...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作