[Mysql] STR_TO_DATE函数

STR_TO_DATE函数用于将字符串转变为日期/时间值

STR_TO_DATE函数与DATE_FORMAT函数的作用是相反的

语法格式

STR_TO_DATE(str,format)

srt:要格式化为日期的字符串(输入字符串) 

format:要使用的格式字符串

如果不能按照format解析str,STR_TO_DATE函数将返回NULL

如果其中任何一个参数为NULL,STR_TO_DATE函数将返回NULL

提示Tips:用于构建日期格式字符串的说明符及其含义如下表所示

限定符 含义
%a 三个字符缩写的工作日名称,例如: MonTueWed
%b 三个字符缩写的月份名称,例如: JanFebMar
%c 以数字表示的月份值,例如: 1, 2, 3…12
%D 以数字表示月份中的某天(可理解为一个月之中的第几天),后跟英文后缀,例如: 1st2nd,3rd
%d 以数值表示月份中的某天,如果是小于10的数字,该数字需要加前导0, 例如: 00,01,02, …31
%e 以数值表示月份中的某天,小于10的数字不需要加前导0,例如: 1,2,… 31
%f 微秒,范围在(000000到999999)
%H 24小时格式的小时,前导加0,例如: 00,01…23
%h 12小时格式的小时,前导加0,例如: 00,01 … 12
%Ⅰ 与%h相同
%i 分钟,范围在00到59
%j 一年中的的第几天,前导加0,例如: 001,002,… 366
%k 24小时格式的小时,无前导0,例如: 0,1,2 … 23
%l 12小时格式的小时,无前导0,例如: 1,2 … 12
%M 月份全名称,例如: January, February…December
%m 以数值形式显示的月份名称,前导加0,例如: 01,02,… 12
%p AM或PM,取决于其他时间说明符
%r 表示时间,12小时格式hh:mm:ss AM/PM
%S 秒,前导加0,例如: 00,01…59
%s 与%S相同
%T 表示时间,24小时格式hh:mm:ss
%U 表示周数,星期日为一周的第一天,例如:00,01,02 … 53时,前导0的周数
%u 表示周数,星期一为一周的第一天,例如:00,01,02 … 53时,前导0的周数
%V 与%U相同,它与%X一起使用
%v 与%u相同,它与%x一起使用
%W 工作日的全称,例如: Sunday, Monday,…, Saturday
%w 工作日,以数字来表示(0 = 星期日,6 = 星期六)
%X 周的四位数表示年份,第一天是星期日,经常与%V一起使用
%x 周的四位数表示年份,第一天是星期一,经常与%v一起使用
%Y 表示年份,四位数,例如: 2000,2001,…等
%y 表示年份,两位数,例如: 00,01,…等
%% 将百分比(%)字符添加到输出

常用的的format格式

常用的格式字符串 示例 结果
%Y/%m/%d SELECT STR_TO_DATE('2022/11/01','%Y/%m/%d'); 2022-11-01
%Y-%m-%d SELECT STR_TO_DATE('2022-11-02','%Y-%m-%d'); 2022-11-02
%e/%c/%Y SELECT STR_TO_DATE('03/11/2022','%e/%c/%Y'); 2022-11-03
%d/%m/%Y %H:%i SELECT STR_TO_DATE('04/11/2022 13:30','%d/%m/%Y %H:%i'); 2022-11-04 13:30:00
%b %d %Y %h:%i %p SELECT STR_TO_DATE('Nov 05 2022 02:30 PM','%b %d %Y %h:%i %p'); 2022-11-05 14:30:00
%Y-%m-%d %T SELECT STR_TO_DATE('2022-11-06 17:29:30','%Y-%m-%d %T'); 2022-11-06 17:29:30
%W %D %M %Y %T SELECT STR_TO_DATE('Monday 7th November 2022 13:45:30','%W %D %M %Y %T'); 2022-11-07 13:45:30
%M,%e,%Y SELECT STR_TO_DATE('November,8,2022', '%M,%e,%Y'); 2022-11-08
%W %M %e %Y SELECT STR_TO_DATE('Wednesday November 09 2022', '%W %M %e %Y'); 2022-11-09
%Y,%m,%d %h,%i,%s SELECT STR_TO_DATE('2022,11,10 12,12,12', '%Y,%m,%d %h,%i,%s'); 2022-11-10 00:12:12

练习案例

将字符串转换为DATE值 

-- 2022-05-25
SELECT STR_TO_DATE('25,5,2022','%d,%m,%Y');
-- 2022-05-26
SELECT STR_TO_DATE('2022-05-26 11:30:00','%Y-%m-%d');
-- 2022-08-05
SELECT STR_TO_DATE('August,5,2022', '%M,%e,%Y');
-- 2022-08-10
SELECT STR_TO_DATE('August 10 2022', '%M %d %Y');
-- 2022-08-14
SELECT STR_TO_DATE('Monday, August 14, 2022', '%W,%M %e, %Y');

将字符串转换为DATETIME值 

-- 2022-05-25 11:30:00
SELECT STR_TO_DATE('20220525 1130','%Y%m%d %h%i');
-- 2022-05-26 11:30:00
SELECT STR_TO_DATE('2022-05-26 11:30:00','%Y-%m-%d %H:%i:%s');
-- 2022-05-27 10:40:10
SELECT STR_TO_DATE('2022,5,27 10,40,10', '%Y,%m,%d %h,%i,%s');

STR_TO_DATE函数在根据格式字符串format解析输入字符串str时,忽略输入字符串str末尾的额外字符

-- 2022-05-25
SELECT STR_TO_DATE('25,5,2022 extra characters','%d,%m,%Y'); 
-- 2022-05-25 11:30:00
SELECT STR_TO_DATE('20220525 1130 extra characters','%Y%m%d %h%i');

如果输入字符串str是非法的,则STR_TO_DATE函数返回NULL

-- NULL
SELECT STR_TO_DATE('2022','%Y');
-- NULL
SELECT STR_TO_DATE('11','%h');
-- NULL
SELECT STR_TO_DATE('1130','%h%i');
-- NULL
SELECT STR_TO_DATE('113005','%h%i%s');
-- NULL
SELECT STR_TO_DATE('August,5,2017', '%M %e %Y');
-- NULL
SELECT STR_TO_DATE('Monday, August 14, 2017', '%W %M %e %Y');

你可能感兴趣的:(Mysql,sql,mysql)