一文速学-玩转MySQL获取时间、格式转换各类操作方法详解

12 篇文章 2 订阅
订阅专栏

目录

前言

一、SQL时间存储类型

1.date

2.datetime

3.time

4.timestamp

PS.datetime与timestamp的区别

对比总结

5.varchar/bigint

二、获取时间

1.now()

 2.localtime()

 3.current_timestamp()

4.localtimestamp()

5.sysdate()

 6.curdate()

7.current_time()

8. curtime()

9.current_time()

10. utc_date()

11.utc_time

 ​编辑

12.utc_timestamp()

 13.HOUR(SYSDATE())

 14.MINUTE(SYSDATE())

三、转换时间 

1.cast() 

 2.convert()

3.str_to_date()

四、时间转换

1.cast() 

2.convert() 

 3.date_format()

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

参阅:



前言

时间在数据库中经常作为时间索引,在数据入库和出库以及更新的时候都需要变化。在一些指标计算或者是提取某段时间的数据时,都会根据数据库中的时间索引数据进行操作。因此很大一部分我们操作数据都得先从时间数据下手,但是想要真正提取到我们想要的时间作为索引,还需要我们掌握许多功能函数方便我们操作,这是一个比较复杂的运用过程。因此特地写下这篇文章,记录一些十分好用常用的处理数据库SQL时间数据的函数,以及实例运用这些函数完成一些复杂查询任务。希望能够帮助到正在看此博文的各位,如果还有什么问题解决不了尽请在评论区提出,博主会一一作答。


一、SQL时间存储类型

首先要玩好处理时间的操作,要先明白此数据类型能够干什么事,有什么用。MySQL中经常用来存储日期的数据类型有三种:Date、Datetime、Timestamp。

1.date

日历日期,例如:‘2022-6-17’.format形式为:%Y-%m-%d。在其他语言中,像Python、JAVA等利用函数输出Date都为yyyy-mm-dd的形式,业务精确到天就用这个格式。

2.datetime

具体时间日期 例如:'2022-6-17 17:00:22' format格式为:%Y-%m-%d %H:%M:%s.当业务需求中需要精确到秒时,可以用这个时间格式。

3.time

具体时间不包括日期,例如:'17:11:00' format格式为:%H:%M:%s。当业务需求中只需要每天的时间,可以用这个时间格式。

4.timestamp

 和datetime存储类型一样,也是既存储时间又存储日期。format格式为:%Y-%m-%d %H:%M:%s.

PS.datetime与timestamp的区别

  1. 存储方式不同,对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出.
  2. 存储的时间范围也不一样timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。 datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。 
  3. timestamp有一个机制是自动初始化与更新,意思就是如果插入数据的时候没有对该值进行赋值,则自动写入当前的 时间戳对应的格式。在更新其他字段的时候该自动会自动更新到当前的时间

对比总结

  1. timestamp和datetime除了存储范围和存储方式不一样,没有太大区别。如果对于跨时区的业务,TIMESTAMP更为合适
  2. timestamp有自动初始化和更新,当你update某条记录的时候,该列值会自动更新,这是和datatime最大的区别

5.varchar/bigint

有时候存储入库格式不是固定的,可能出现入库时间精确到日或者是小时又可能只有月,这种灵活不固定的时间就只能使用字符串或者是BIGINT这种类型格式来进行。

 

 这种就需要提取出来后期处理,转换为时间格式进行计算或者进行逻辑运算得到自己想要的时间。

二、获取时间

1.now()

获取当地具体日期和时间:

select now() as time

 2.localtime()

获取当地具体日期和时间,与now()一样:

select LOCALTIME() as time

 

 3.current_timestamp()

获取当地具体日期和时间,与now()一样:

select current_timestamp() as time

 

4.localtimestamp()

获取当地具体日期和时间,与now()一样:

select LOCALTIMESTAMP() as time

 

以上这4种函数功能都与now()功能一样获取当地具体日期和时间,平常使用一个now()就好了好记。

5.sysdate()

获取当地具体日期和时间,与now()上述几个函数不一样的是,now()在执行该函数之前就已得到了。

select sysdate() as time

以上函数均为获取具体日期和时间。


 6.curdate()

获取当地具体日期:

select curdate() as time

7.current_time()

获取当地具体日期,和curdate()函数功能一样:

select current_date() as time

 以上函数均为获取具体日期。


8. curtime()

获取具体的时间:

select curtime() as time

 

9.current_time()

获取具体的时间:

select current_time() as time

 

 以上均为获得具体时间的函数。


10. utc_date()

获取UTC时间的日期,因为我们是东八时区要快8个小时,本地时间=UTC时间+8小时。

select utc_date() as time

由于博主现在是晚上九点所以还是6月17日,如果是早上八点之前就是6月16号了。

11.utc_time

获取UTC时间的时间。

select utc_time() as time

 

12.utc_timestamp()

获取UTC时间的具体日期和时间,在做跨国业务时非常有用。

select utc_timestamp() as time

 

 以上为获取UTC时间函数。


 13.HOUR(SYSDATE())

获取系统具体小时:

select HOUR(SYSDATE()) as time

 14.MINUTE(SYSDATE())

获取当前系统分钟:

select MINUTE(SYSDATE()) as time

 

 其他获取year,month,day,second,microsecond都可以通过这种方法获得,这里不再演示。

三、转换时间 

如果是用BIGINT或者是字符串varchar存储的时间数据就需要将该列数据转换为时间数据,或者输入一个字符串想要转化为时间格式都需要转换函数,这里详细介绍各种方法解决这种问题:

1.cast() 

基础语法格式:

cast( <数据> as <数据类型> )

可转换的类型有字符串varchar、日期date、时间time、日期时间datetime、浮点型decimal、整数signed、无符号整数unsigned。 

例如我们拿到展示的sql表格:

 该列类型为BIGINT:

 下面直接用cast转换为时间类型:

select cast(time as date) as time
from value_test

 

 可见如果有与其他format不对应,只记录到月或者记录到小时时,将不能识别转为时间类型。也可以切换成time或是datetime:

select cast(time as datetime) as time
from value_test

select cast(time as time) as time
from value_test

 

只要是有6个字符的都会被识别为%H:%M:s。

我们可以修改表再看:

 

 2.convert()

基础语法格式:

convert(<数据>,<数据类型>)
select CONVERT(time ,date) as time
from value_test

 

 和上述cast的功能一样,但是cast是强制转换。

所以说如果涉及到记录有多个不同维度的时间数据存储的时候,一般是不用数据库时间类型去做存储的。看cast的例子就可以看出。

3.str_to_date()

str_to_date()函数可以将时间格式的字符串按照所指定的显示格式(format)转换为不同的时间类型。

基础语法格式:

str_to_date(<字符串>,<format格式>')
select str_to_date(time,'%Y%m%d') as time
from value_test

 这个函数自由性要比cast和convert的自由性高很多,可以自由定义format,但是不会仅显示单个年或日,后面会根据字符的长度补零填充:

select str_to_date(time,'%Y') as time
from value_test

 这里我们可以更改表格的时间观察是否不满足或者超过标准的时间格式能够被识别:

select str_to_date(time,'%Y%m%d') as time
from value_test

 

select str_to_date(time,'%Y%m%d%H%i%S') as time
from value_test

 可见兼容能力是很强的。

如果是时间都是统一格式记录的直接使用cast或者convert快速转换为时间格式就好了,若是记录的有多个维度的时间应该使用str_to_date函数来转换。

四、时间转换

时间转换一般是把时间类似数据转换为其他类型数据,以上例子cast()函数和convert()函数都可以做到。改变一下位置就好了,由于上述已经提到这里就做两个简单的例子展示:

1.cast() 

select cast(create_time as signed) as time
from value_test

 

2.convert() 

select convert(create_time ,signed) as time
from value_test

 

 3.date_format()

其实最主要的还是使用data_format(),date_format()函数可以以不同的格式显示日期/时间数据,可以实现日期转换成字符串。也就是将时间数据读取之后按照format形式转换为字符串输出,当然转换为了字符串我们又可以转为其他的格式。

语法格式:

date_format(<时间类型数据>,<format格式>)

 其中format的格式参数可选的有:

格式描述
%a星期名缩写
%b月名缩写
%c代表几月的数值
%D带时序后缀的数值-天
%d天数,数值(00-31)
%e天数,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j转换为天数 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U从年初首周开始计算 (00-53)  星期日是一周的第一天
%u从年初首周开始计算 (00-53)  星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w当前周的天数,(0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

 自己大家可自己随意组合使用:

select date_format(create_time, '%x%v') as time
from value_test

 

但是记住转换输出的都为字符串,转换为其他类型都需要再次转换。

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。


参阅:

mysql 日期类型转换

mysql 日期格式的转换和生成时间戳
weixin_42095178的博客
12-18 1654
如果你想生成一个特定日期的时间戳,可以将日期作为参数传递给UNIX_TIMESTAMP函数。这将返回2023年3月17日的整数值,表示该日期的时间戳。请注意,时间戳是一个以秒为单位的整数值,表示从1970年1月1日00:00:00开始经过的秒数。这些示例中,%Y表示四位数的年份,%m表示两位数的月份,%d表示两位数的日期,%H表示两位数的小时(24小时制),%i表示两位数的分钟。在MySQL中,可以使用DATE_FORMAT函数将日期格式进行转换。你可以根据自己的需求选择合适的日期格式进行转换。
mysql 日期和时间格式转换实现语句
12-15
这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAYS(NOW()) – TO_DAYS(date_col) <= 30; DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。 mysql> select DAYOFWEEK(‘1998-02-03’); -> 3 WEEKDAY(date) 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。 mysql
MySQL超详细常用日期格式转换函数、字符串函数、聚合函数
最新发布
weixin_43580824的博客
08-09 774
【代码】MySQL超详细常用日期格式转换函数、字符串函数、聚合函数。
MySQL时间转换
kersixy的博客
06-22 1590
MySQL时间转换: 1. bigint类型的时间戳 2. datetime类型 3. date类型 4. timestamp类型 5. varchar/char类型时间
mysql时间转换格式
pandaToSuccess的博客
04-26 9371
date_format(date,'%Y-%m-%d') date_format(date,'%Y-%m-%d %H:%i:%s') str_to_date(date,'%Y-%m-%d') str_to_date('2022-04-26 13:32:06','%Y-%m-%d %H:%i:%s')
Mysql 中时间格式转换
小小蜗牛的博客
11-07 1247
Mysql 中时间格式转换
mysql时间类型转换
weixin_42322925的博客
09-09 5470
MySQL时间类型转换1)时间类型转换为字符串类型 DATE_FORMAT(date,format)2)字符串类型转换为时间类型STR_TO_DATE(str,format)3)标题纯数字(世纪-年-月-日 cyymmdd)类型转换为时间类型转换 1)时间类型转换为字符串类型 DATE_FORMAT(date,format) format 可参照这篇文章理解 SELECT DATE_FORMAT(20210909,'%Y%m%d') date ## 1.1 时间类型加减 1.1.1 加 : DA
mysql中日期格式转换
08-30
- *1* *2* *3* [一文速学-玩转MySQL获取时间格式转换各类操作方法详解](https://blog.csdn.net/master_hunter/article/details/125330963)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630",...
mysql 时间格式转换
didanbei4549的博客
01-18 401
1.varchar 转 datetime 格式 DATE_FORMAT(time,'%Y-%m-%d %H:%m:%s'); 2.时间减去一小时 DATE_FORMAT(date_add(time, interval -1 hour),'%Y-%m-%d%H:%m:%s'); 3.时间减去一天 DATE_FORMAT(date_add(time, interval...
Mysql最常用时间格式转化
jsjxb的博客
03-16 5526
主要介绍了Mysql中最常用的两个时间格式转化函数
MySql时间格式转换
A_银河之光
05-02 321
1.NOW()返回的时间 格式:2017-05-02 15:25:02 2.CURDATE()返回的时间 格式:2017-05-02 3.CURTIME返回的时间 格式:15:25:02DATE_ADD(CURDATE(),INTERVAL 1 YEAR) 当前时间+1年 MONTH 当前时间+1月 DAY 当前时间+1天
mysql转换时间格式
o12321o的博客
04-22 80
mysql转换时间格式FROM_UNIXTIMEDATE_FORMAT FROM_UNIXTIME 语法:FROM_UNIXTIME(unix_timestamp,format) 例子: SELECT FROM_UNIXTIME(1234567890, ‘%Y-%m-%d %H:%i:%S’) DATE_FORMAT 例子:select DATE_FORMAT(‘2019-10-16 10:59:18’,’%Y-%m-%d %H:%i:%s’); ...
mysql 时间格式转换(时间函数的使用)
02-16 1029
-- 时间格式转换 ,获取当前的时间 SELECT DATE_FORMAT(NOW(), '%Y%m') SELECT IFNULL(submit_month,"2021汇总"),COUNT(ymd),ROUND(COUNT(ymd)/max(ymd),3) FROM ( SELECT CONCAT( SUBSTRING_INDEX(SUBSTRING_INDEX(submit_time,'-',2),'-',1), SUBSTRING_INDEX(SUBSTRING_INDEX(submit_tim
Mysql 存储函数案例分享(时间格式转换
OosunlyoO的博客
04-12 282
水平不高,适合初学者看。第一次写mysql的存储函数,但在网上找了很多存储函数的样式都在本地执行不了;我这个sql应该复制粘贴就能执行,初学者,可以当做样式来学习一下。先说需求,业务需求就不说了,直接说数据库层面的需求:以前表中有两个字段 start_time(以零点开始:2018-03-06 00:00:00)和end_time(24点结束:2018-03-09 23:59:59),是一个时间区...
数据库mysql日期格式转换
热门推荐
小源的成长历程
07-29 2万+
mysql日期转换方法,超级详细!!!,亲测好用。
MySQL 时间转换
wujizhishui的博客
04-26 634
1. 获取当前时间(dateTime 格式) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2019-04-26 12:01:37 | +---------------------+ 1 row in set (0.00 sec) 2. 获取当前时...
mysql时间格式转换
weixin_45029766的博客
02-02 243
-- 查询当前"时分秒" SELECT CURRENT_TIME() -- 查询当前"年月日" SELECT CURRENT_DATE() AS Systemtime; -- 查询当前"年月日时分秒" SELECT NOW() -- 当前时间"年月日时分秒"格式化为"年月日" SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') TIME; -- 指定时间格式化为年月日 SELECT DATE_FORMAT('2020-10-08 11:10:30', '%Y
写文章

热门文章

  • 操作系统:银行家算法(C语言代码)详解 61205
  • 一文速学数模-降维模型(一)PCA(主成分分析法)原理以及应用+代码实现 41384
  • Clickhouse时间日期函数一文详解+代码展示 33817
  • Pandas常用I/O函数(六):read_excel函数参数使用详解+实例代码 32491
  • 一文速学-数据预处理归一化详细解释 30946

分类专栏

  • 一文速学-数学建模常用模型 付费 70篇
  • 一文速学系列-数据分析 付费 46篇
  • 一文速学-数据仓库从零搭建指南 7篇
  • 一文速学-深度学习项目实战 26篇
  • 一文速学-SQL各类数据库操作 23篇
  • MySQL 12篇
  • Hive 6篇
  • sqlparse血缘解析 8篇
  • 一文速学-PySpark大数据分析 23篇
  • 一文速学-Python基础 21篇
  • 一文速学-大数据Hadoop框架 15篇
  • Hosts 1篇
  • 操作系统 3篇
  • 数据结构 12篇

最新评论

  • 一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

    pwd`×续缘`: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文 也欢迎您来逛逛我的博客哦

  • 一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

    Y小夜: 大佬评论的前排!文章内容丰富细致,讲解的很详细,期待大佬后续的文章哦,欢迎大佬来我的博客指导。

  • 一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

    征途黯然.: 这篇关于一文速学ChatBi与数据库对话大模型技术原理及框架一览的文章非常有深度和见解!理解和解释令人印象深刻。我从中学到了很多知识。感谢分享!表情包

  • 一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

    小 明: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,文章思路清晰,图文并茂,详略得当,三连支持,期待博主持续输出好文!

  • 一文速学-零成本与数据沟通NL2SQL的概念和实现技术

    fanstuck: 是的,尤其是数仓最后的大宽表

最新文章

  • 「嘉年华观会」解锁创作的N种方式!漫步“增一行代码”开发者嘉年华大会有感
  • GBI(生成式商业智能)实际业务生产落地运用上的探索和实践
  • 一文速学ChatBi“与数据库对话“大模型技术原理及框架一览
2024年37篇
2023年77篇
2022年147篇
2021年33篇
2020年30篇

目录

目录

评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanstuck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家南宁步行街玻璃钢雕塑多少钱信阳玻璃钢动物雕塑制作厂家福州玻璃钢雕塑公司厂家批发玻璃钢鹿雕塑报价玻璃钢雕塑放在户外注意上街区玻璃钢校园雕塑保定优质玻璃钢雕塑欢迎来电玻璃钢做的雕塑有裂缝怎么办珠海皇冠装饰玻璃钢雕塑济南景观玻璃钢雕塑动物玻璃钢雕塑工厂博乐气球商场美陈哪家靠谱商场灯饰美陈新郑玻璃钢仿铜雕塑定制厂家榆林玻璃钢卡通雕塑玻璃钢地藏王雕塑定做许昌室外校园玻璃钢景观雕塑清远玻璃钢景观雕塑广场玻璃钢雕塑供应厂家四川大型商场美陈批发揭阳户外景观玻璃钢雕塑肖像玻璃钢雕塑厂家天壶玻璃钢雕塑郑州标牌玻璃钢仿铜雕塑定制开封玻璃钢泡沫雕塑报价韶关玻璃钢人物雕塑直销价格上海玻璃钢仿真动物雕塑厂玻璃钢卡通水果雕塑选哪家户外玻璃钢卡通雕塑制作卡通玻璃钢雕塑工业香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化