大家好,又见面了,我是你们的朋友全栈君。
以下函数执行在mysql5.7版本下,高版本的mysql可能某些函数存在差异
日期查询
1)查询当前时间日期
now()
获取 当前日期和时间 //2018-04-12 18:18:57curdate()
当前日期,///2018-04-12curtime()
当前时间 //18:18:57current_time()
; //同curtime(),current_time
current_date()
; // 同curdate(),current_date
current_timestamp()
//同now()
2)时间戳
unix_timestamp([date])
将日期转化为时间戳,参数可以不写默认now()- date 可以是日期时间类型 也可以是时间字符串 ‘2018-2-12’
mysql> select from_unixtime(unix_timestamp('2018:4:8'));
+------------------------------------------------+
| from_unixtime(unix_timestamp('2018:4:8')) |
+------------------------------------------------+
| 2018-04-08 00:00:00 |
from_unixtime(timestamp [,pattern])
根据format格式化时间戳- timestamp : 时间戳即 UNIX_TIMESTAMP()
- pattern 目标的模式字符串。使用format参数后返回的结果是 *** 字符串***。常用的时间格式化占位符如下更多参数请参考,
- %Y 年,四位数字
- %y 年,后两位数字
- %m 月 ,数字[1-12]
- %d 日,月份里的第几天,两位数字[1-31]
- %H 小时,24进制 [0-23]
- %h 小时,12进制[0-11]
- %i 分钟 [0-59]
- %s | %S 秒 0-59
3)时间截取(返回对应的日期,时间或者数字)
-
date(expr)
// 如果解析失败返回Null,返回日期类型date -
time(expr)
//返回时间类型 time -
year(expr)
//返回数字 -
month(expr)
//返回数字【1-12】 -
day(expr)
//返回数字【1-31】 -
hour(expr)
//返回数字【0-23】 -
minute(expr)
//返回数字【0-59】 -
last_day(date)
//返回最后一天 ,返回date类型 //2018-04-30 -
to_days(expr)
//返回到公元0年一月一日的总天数 -
DATE_FORMAT(expr,pattern)
//时间格式化,返回字符串
expr :时间字符串,日期字符串或者日期时间类型。
对于截取年,月,日,时,分,秒返回的都是对应的字符串,因为时间日期类型mysql 本身就只提供了date,time ,datetime,timestamp,year这五种类型select date(now()),time('2018-04-19 11:10:11'),year(now()),to_days(now()); 2018-04-19 11:10:11 2018 737168
select DATE_FORMAT(now(),'%Y%m%d'); -- 20181101 select DATE_FORMAT('2019-01-02','%Y-%m-%d') -- 2019-01-02
日期操作
日期时间增减
ADDDATE(date,INTERVAL expr unit)
- date 要操作的日期时间,可以是日期类型也可以是日期字符串
- INTERVAL: MySQL关键字 ,意思是间隔,间隙
- unit 操作的单元,年,月,日,时,分,秒对应==YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
- expr 想要增加或减少的时间单位。expr>0,增加,expr<0减少
DATE_ADD(date,INTERVAL expr unit)
类似ADDDATE()- 返回结果是字符串
ADDTIME(expr1,expr2)
时间相加 expr1+expr2
SUBDATE(date,INTERVAL expr unit)
同DATE_SUB(date,INTERVAL expr unit)
DATEDIFF(expr1, expr2)
计算两个表达式之间的时间差(expr1-expr2 )天,
SELECT
DATEDIFF(
'2018-4-23',
'2018-4-12 12:12:23'),
DATEDIFF(
now(),
DATE_ADD(now(), INTERVAL 12 DAY)
)
11 -12
日期字符串转化
常用的时间格式化占位符如下更多参数请参考,
- %Y 年,四位数字
- %y 年,后两位数字
- %m 月 ,数字[1-12]
- %d 日,月份里的第几天,两位数字[1-31]
- %H 小时,24进制 [0-23]
- %h 小时,12进制[0-11]
- %i 分钟 [0-59]
- %s | %S 秒 0-59
日期转字符串
DATE_FORMAT(date,pattern)
//将日期转化为指定模式的字符串TIME_FORMAT(time,pattern)
// 只能格式化为时间,不保留日期信息。from_unixtime(timestamp,pattern)
//时间戳转为字符串
格式化日期
select DATE_FORMAT(now(),'%Y-%m-%d %H:%i-%s')
-- 2018-04-23 15:15-26
select DATE_FORMAT(DATE_ADD(now(),INTERVAL -8 MONTH),'%Y-%m-%d');
-- 2018-04-26
注意如果模式字符串写的有问题,可能并不会报错
select DATE_FORMAT(now(),'%m-%m-%m')
-- 04-04-04
TIME_FORMAT 该函数不能格式化 日期,只能格式化时间
select TIME_FORMAT(now(),'%Y-%m-%d %H:%i-%s');
-- 0000-00-00 15:15-26
select TIME_FORMAT(now(),'%H:%i-%s');
-- 15:15-26
from_unixtime 格式化时间戳,默认的格式化模式 '%Y-%m-%d %H:%i:%s '
SELECT from_unixtime(UNIX_TIMESTAMP())
-- 2018-04-19 11:10:11
字符串转日期
str_to_date(dateStr,pattern)
- dateStr :字符串日期表达式
- pattern :匹配模式
select str_to_date('2017/12/23','%Y/%m/%d');
-- 结果 2017-12-23
如果待格式化的字符串,不符合匹配模式字符串,则不会进行格式化。
select STR_TO_DATE('2019/02','%Y-%m');
select STR_TO_DATE('2019/02','%Y/%m');
会发现 第一个格式化不会输出任何内容。
因为在回复里有提到,SELECT STR_TO_DATE('2019/02','%Y/%m');
mysql返回null。所以查阅一下资料,该函数未能正确执行与 mysql model
有关系。
# 查询全局模式
SELECT @@GLOBAL.sql_mode;
# 查询当前会话模式
SELECT @@SESSION.sql_mode;
mysql8 默认包含以下模式:
The default SQL mode in MySQL 8.0 includes these modes: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, and NO_ENGINE_SUBSTITUTION.
影响日期转化的模式是 NO_ZERO_IN_DATE, NO_ZERO_DATE。
- NO_ZERO_IN_DATE :该模式影响服务器是否将 年份非空但是月、日为空的日期当做合法的日期。类似于’2010-00-01’ 、 ‘2010-01-00’、‘2010-00’ 之类的
- NO_ZERO_DATE: 该模式影响服务器是否将 ‘0000-00-00’ 当做合法日期
-
将模式中的NO_ZERO_IN_DATE、NO_ZERO_DATE去掉就可以治支持。
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-
日期截取
SELECT LEFT(STR_TO_DATE('2020-02-01','%Y-%m-%d'),7)
更多详情 mysql 8.0 官网文档
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137623.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...