mysql时间相关处理

时间格式处理

mysql中时间格式处理

  • 获取( %Y-%m-%d %H:%i:%s) 格式当前时间
SELECT NOW()
select current_timestamp
select current_timestamp()
  • 获取( %Y-%m-%d) 格式当前时间
SELECT CURRENT_DATE()
  • 获取当时时间戳(10位)
select UNIX_TIMESTAMP(now())  
SELECT UNIX_TIMESTAMP()

# 注意以下三种形式,结果相同
SELECT UNIX_TIMESTAMP('20120608');
SELECT UNIX_TIMESTAMP('2012-6-8');
SELECT UNIX_TIMESTAMP('2012-06-08');
  • 时间戳转为时间格式
SELECT FROM_UNIXTIME(1528681020)  ---> 处理10位时间戳 结果:2018-06-11 09:37:00
SELECT FROM_UNIXTIME(unix_timestamp(),'%Y-%m-%d %H:%i:%s')  ---> 处理10位时间戳,指定格式 结果:2021-08-19 08:50:08
SELECT FROM_UNIXTIME(unix_timestamp(),'%Y-%m-%d') ---> 处理10位时间戳,指定格式 结果:2021-08-19
SELECT FROM_UNIXTIME(1528681020000/1000,'%Y-%m-%d %H:%i:%s')  ---> 处理13位时间戳,指定格式 结果:2018-06-11 09:37:00
  • DATE_FORMAT
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d')  结果:2021-08-19
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')  结果:2021-08-19 09:48:17
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %T')  结果:2021-08-19 09:48:25
  • STR_TO_DATE
select STR_TO_DATE('2012-10-01 8:39:50', '%Y-%m-%d %T')  结果:2012-10-01 08:39:50     '%T'= 时间, 24-小时 (hh:mm:ss)
select STR_TO_DATE('2012-10-01 8:39:50', '%Y-%m-%d')     结果:2012-10-01
select STR_TO_DATE('2012-10-01 8:39:50', '%Y-%m-%d %H')  结果:2012-10-01 08:00:00
select STR_TO_DATE('2012-10-01 8:39:50', '%Y-%m-%d %H:%i')  结果:2012-10-01 08:39:00
select STR_TO_DATE('2012-10-01 8:39:50', '%Y-%m-%d %H:%i:%s')  结果:2012-10-01 08:39:50
select STR_TO_DATE('2012-10-01', '%Y-%m-%d %H:%i:%s')  结果: 2012-10-01 00:00:00

mybatis中使用注意

image-20210819102153143
或者转义语句:

<![CDATA[ sql语句 ]]>   

与当前时间比较

  • 符号直接比
SELECT '2015-08-05 00:00:00' > '2012-10-01 8:39:50' 结果:1

# 实际使用
select * from table where add_time >'2015-08-05 00:00:00'
  • 内置函数转换,再比(影响索引)
 WHERE
 DATE_FORMAT(start_time, '%Y-%m-%d') <= DATE_FORMAT(NOW(), '%Y-%m-%d') 
 AND 
 DATE_FORMAT(end_time, '%Y-%m-%d') >= DATE_FORMAT(NOW(), '%Y-%m-%d')
 
 WHERE
 DATE_FORMAT(add_time, '%Y-%m-%d') <= DATE_FORMAT(NOW(), '%Y-%m-%d') 
 AND 
 DATE_FORMAT(add_time, '%Y-%m-%d') >= DATE_FORMAT(NOW(), '%Y-%m-%d')
 
WHERE
UNIX_TIMESTAMP(add_time) >= UNIX_TIMESTAMP ('2018-02-18')
AND 
UNIX_TIMESTAMP(add_time) <= UNIX_TIMESTAMP ('2018-02-20')
  • between and语句
where add_time between '2018-07-01' and '2018-07-04' 

结果是1号到3号的数据,这是因为时间范围显示的实际上只是‘2018-07-01 00:00:00’到’2018-07-04 00:00:00’之间的数据,而’2018-07-04’的数据就无法显示出来,between and对边界还需要进行额外的处理。

日期计算相关

计算日期差值也可以间接做时间比较

计算差值

  • TIMESTAMPDIFF函数

语法:TIMESTAMPDIFF(unit,begin,end),计算的是end-begin

unit:比较的类型。可选参数:MICROSECOND 微秒、SECOND 秒、MINUTE 分钟、HOUR 小时、DAY 天、WEEK 周、MONTH 月份、QUARTER 季度 、YEAR 年份

begin:DATE或DATETIME表达式

end:DATE或DATETIME表达式

PS:begin和end类型可以不相同,例如begin为DATE、end为DATETIME。

SELECT TIMESTAMPDIFF(DAY,'2012-10-01','2013-01-13')		# 结果为104
SELECT TIMESTAMPDIFF(DAY,'2012-10-01','2013-01-13')>=0  # 结果为1

SELECT TIMESTAMPDIFF(MONTH,'2012-10-01','2013-01-13')   # 结果为3
SELECT TIMESTAMPDIFF(MONTH,'2012-10-01','2013-01-13') >=0  # 结果为1
SELECT TIMESTAMPDIFF(MONTH,'2013-10-01','2013-01-13') >=0  # 结果为0

WHERE TIMESTAMPDIFF(MONTH,'数据库中当条信息的日期',STR_TO_DATE('前台传入放入日期', '%Y-%m-%d %H:%i:%s'))
  • DATEDIFF

语法:DATEDIFF(date1,date2) 计算的是date1-date2

SELECT DATEDIFF('2018-07-01','2018-07-04')  # 结果为 -3
SELECT DATEDIFF('2018-07-31','2018-07-04')  # 结果为 27
SELECT DATEDIFF('2012-10-02 23:39:50','2012-10-01 8:39:50');  # 结果为1

加减日期

  • DATE_SUB、DATE_ADD

DATE_SUB(date,INTERVAL expr type)、DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

type可以为:MICROSECOND 、SECOND 、MINUTE 、HOUR 、DAY 、WEEK 、MONTH 、QUARTER 、YEAR 、SECOND_MICROSECOND 、MINUTE_MICROSECOND、、MINUTE_SECOND 、HOUR_MICROSECOND 、HOUR_SECOND 、HOUR_MINUTE 、DAY_MICROSECOND 、DAY_SECOND 、DAY_MINUTE 、DAY_HOUR 、YEAR_MONTH

SELECT DATE_FORMAT(DATE_SUB('2012-10-01 8:39:50',INTERVAL 1 DAY),'%Y-%m-%d');  结果:2012-09-30
SELECT DATE_FORMAT(DATE_ADD('2012-10-01 8:39:50',INTERVAL 1 DAY),'%Y-%m-%d');  结果:2012-10-02
SELECT DATE_FORMAT(DATE_ADD('2012-10-01 8:39:50',INTERVAL 8 SECOND),'%Y-%m-%d');  结果:2012-10-01 08:39:58
SELECT DATE_FORMAT(DATE_ADD('2012-10-01 8:39:50',INTERVAL 20 MONTH ),'%Y-%m-%d');  结果:2014-06-01
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值