MySQL 日期字符串转换

MySQL 日期字符串转换文章目录 日期查询 1 查询当前时间日期 2 时间戳 3 时间截取 返回对应的日期 时间或者数字 日期操作 日期时间增减 日期字符串转化 日期转字符串 字符串转日期 日期查询 1 查询当前时间日期 now 获取 当前日期和时间 2018 04 12 18 18 57 curdate 当前日期 2018 04 12 curtime 当前时间 18 18 57

文章目录

日期查询

1)查询当前时间日期

2)时间戳

3)时间截取(返回对应的日期,时间或者数字)

日期操作

日期时间增减

日期字符串转化

日期转字符串

字符串转日期

日期查询
1)查询当前时间日期

now() 获取 当前日期和时间 //2018-04-12 18:18:57

curdate() 当前日期,///2018-04-12

curtime() 当前时间 //18:18:57

current_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)时间截取(返回对应的日期,时间或者数字)
日期操作
日期时间增减

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’ 当做合法日期

更多详情 mysql 8.0 官网文档

编程小号
上一篇 2025-08-01 14:17
下一篇 2025-04-10 07:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/121072.html