MySQL 日期字符串转换

MySQL 日期字符串转换日期查询1)查询当前时间日期now()获取当前日期和时间//2018-04-1218:18:57curdate()当前日期,///2018-04-12curtime()当前时间//18:18:57current_time();//同curtime(),current_timecurrent_date();//同curdate()…

大家好,又见面了,我是你们的朋友全栈君。

以下函数执行在mysql5.7版本下,高版本的mysql可能某些函数存在差异

日期查询

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)时间截取(返回对应的日期,时间或者数字)
  • 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’ 当做合法日期
  1. 将模式中的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';
    
  2. 日期截取

     SELECT LEFT(STR_TO_DATE('2020-02-01','%Y-%m-%d'),7)
    

更多详情 mysql 8.0 官网文档

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137623.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Apache中 RewriteCond 规则参数介绍[通俗易懂]

    Apache中 RewriteCond 规则参数介绍[通俗易懂]Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结果,这次我终于算大概知道它的意思了。RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。RewriteEngineonRewriteCond%{HTTP_USER_AGENT}^Mozilla\/5\.0.*Rew…

    2022年6月10日
    27
  • SpringBoot——关于Cache缓存获取值后修改的问题「建议收藏」

    SpringBoot——关于Cache缓存获取值后修改的问题「建议收藏」SpringBoot——关于Cache缓存获取值后修改的问题

    2022年4月23日
    35
  • JMH 测试「建议收藏」

    JMH 测试「建议收藏」JHM测试框架

    2022年7月11日
    17
  • CreateMutex、WaitForSingleObject、ReleaseMutex「建议收藏」

    CreateMutex、WaitForSingleObject、ReleaseMutex「建议收藏」我们对线程做一些简单的同步处理,这里我们用互斥量(Mutex)。互斥量(Mutex)和二元信号量类似,资源仅允许一个线程访问。与二元信号量不同的是,信号量在整个系统中可以被任意线程获取和释放,也就是说,同一个信号量可以由一个线程获取而由另一线程释放。而互斥量则要求哪个线程获取了该互斥量锁就由哪个线程释放,其它线程越俎代庖释放互斥量是无效的。在使用互斥量进行线程同步时会用到以下几个函数:HANDLEWINAPICreateMutex(LPSECURITY_ATTRIBUTESlpMute

    2022年6月26日
    24
  • 大秦帝国之崛起接下来是什么_大秦帝国之崛起怎么样

    大秦帝国之崛起接下来是什么_大秦帝国之崛起怎么样

    2022年9月23日
    1
  • STM32独立看门狗实验

    STM32独立看门狗实验一为什么需要看门狗?在MCU微型计算机系统中,MCU运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至发生跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是人们就设计了一款用于实时监测计算机运行状态的芯片,我们就将其称为“看门狗(WatchDog)”。二看门狗的作用看门狗在我们程序正常工作的时候是不工作的,也就是说他根本没有任何作用,只有在单片…

    2022年5月18日
    111

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号