MySQL日期函数与日期转换格式化函数大全

Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数

1、DAYOFWEEK(date)

SELECT DAYOFWEEK(‘2016-01-16')
SELECT DAYOFWEEK(‘2016-01-16 00:00:00')
-> 7 (表示,记住:星期天=1,星期一=2, ... 星期六=7)

2、WEEKDAY(date)

SELECT WEEKDAY(‘2016-01-16')
SELECT WEEKDAY(‘2016-01-16 00:00:00')
-> 5 (表示返回date是在一周中的序号,西方日历中通常一周的开始是星期天,并且以0开始计数,所以,记住:0=星期一,1=星期二, ... 5=星期六)

3、DAYOFMONTH(date)

SELECT DAYOFMONTH(‘2016-01-16')
SELECT DAYOFMONTH(‘2016-01-16 00:00:00')
-> 16 (表示返回date是当月的第几天,1号就返回1,... ,31号就返回31)

4、DAYOFYEAR(date)

SELECT DAYOFYEAR(‘2016-03-31')
SELECT DAYOFYEAR(‘2016-03-31 00:00:00')
-> 91 (表示返回date是当年的第几天,01.01返回1,... ,12.31就返回365)

5、MONTH(date)

SELECT MONTH(‘2016-01-16')
SELECT MONTH(‘2016-01-16 00:00:00')
-> 1 (表示返回date是当年的第几月,1月就返回1,... ,12月就返回12)

6、DAYNAME(date)

SELECT DAYNAME(‘2016-01-16')
SELECT DAYNAME(‘2016-01-16 00:00:00')
-> Saturday (表示返回date是周几的英文全称名字)

7、MONTHNAME(date)

SELECT MONTHNAME(‘2016-01-16')
SELECT MONTHNAME(‘2016-01-16 00:00:00')
-> January (表示返回date的是当年第几月的英文名字)

8、QUARTER(date)

SELECT QUARTER(‘2016-01-16')
SELECT QUARTER(‘2016-01-16 00:00:00')
-> 1 (表示返回date的是当年的第几个季度,返回1,2,3,4)

9、WEEK(date,index)

SELECT WEEK(‘2016-01-03')
SELECT WEEK(‘2016-01-03', 0)
SELECT WEEK(‘2016-01-03', 1)
-> 1 (该函数返回date在一年当中的第几周,date(01.03)是周日,默认是以为周日作为一周的第一天,函数在此处返回1可以有两种理解:1、第一周返回0,第二周返回1,.... ,2、以当年的完整周开始计数,第一周返回1,第二周返回2,... ,最后一周返回53)
-> 1 (week()默认index就是0. 所以结果同上)
-> 0 (当index为1时,表示一周的第一天是周一,所以,4号周一才是第二周的开始日)

10、YEAR(date)

SELECT YEAR(‘70-01-16')
SELECT YEAR(‘2070-01-16')
SELECT YEAR(‘69-01-16 00:00:00')
-> 1970 (表示返回date的4位数年份)
-> 2070
-> 1969 

要注意的是:如果年份只有两位数,那么自动补全的机制是以默认时间1970.01.01为界限的,>= 70 的补全 19,< 70 的补全 20

11、HOUR(time)

SELECT HOUR(‘11:22:33')
SELECT HOUR(‘2016-01-16 11:22:33')
-> 11
-> 11

返回该date或者time的hour值,值范围(0-23)

12、MINUTE(time)

SELECT MINUTE(‘11:22:33')
SELECT MINUTE(‘2016-01-16 11:44:33')
-> 22
-> 44

返回该time的minute值,值范围(0-59)

13、SECOND(time)

SELECT SECOND(‘11:22:33')
SELECT SECOND(‘2016-01-16 11:44:22')
-> 33
-> 22

返回该time的minute值,值范围(0-59)

14、PERIOD_ADD(month,add)

SELECT PERIOD_ADD(1601,2)
SELECT PERIOD_ADD(191602,3)
SELECT PERIOD_ADD(191602,-3)
-> 201603
-> 191605
-> 191511

该函数返回对month做增减的操作结果,month的格式为yyMM或者yyyyMM,返回的都是yyyyMM格式的结果,add可以传负值

15、PERIOD_DIFF(monthStart,monthEnd)

SELECT PERIOD_DIFF(1601,1603)
SELECT PERIOD_DIFF(191602,191607)
SELECT PERIOD_DIFF(1916-02,1916-07)
SELECT PERIOD_DIFF(1602,9002)
-> -2
-> -5
-> 5
-> 312

该函数返回monthStart - monthEnd的间隔月数

16、DATE_ADD(date,INTERVAL number type),同 ADDDATE()

SELECT DATE_ADD(“2015-12-31 23:59:59”,INTERVAL 1 SECOND)
SELECT DATE_ADD(“2015-12-31 23:59:59”,INTERVAL 1 DAY)
SELECT DATE_ADD(“2015-12-31 23:59:59”,INTERVAL “1:1” MINUTE_SECOND)
SELECT DATE_ADD(“2016-01-01 00:00:00”,INTERVAL “-1 10” DAY_HOUR)
-> 2016-01-01 00:00:00
-> 2016-01-01 23:59:59
-> 2016-01-01 00:01:00
-> 2015-12-30 14:00:00

DATE_ADD()和ADDDATE()返回对date操作的结果

1、date的格式可以是“15-12-31”,可以是“15-12-31 23:59:59”,也可以是“2015-12-31 23:59:59”,如果参数date是date格式,则返回date格式结果,如果参数date是datetime格式,则返回datetime格式结果

2、type格式:
    SECOND 秒 SECONDS
    MINUTE 分钟 MINUTES
    HOUR 时间 HOURS
    DAY 天 DAYS
    MONTH 月 MONTHS
    YEAR 年 YEARS
    MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
    HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
    DAY_HOUR 天和小时 "DAYS HOURS"
    YEAR_MONTH 年和月 "YEARS-MONTHS"
    HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
    DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
    DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"

3、另外,如果不用函数,也可以考虑用操作符“+”,“-”,例子如下:

SELECT “2016-01-01” - INTERVAL 1 SECOND
SELECT “2016-01-01” - INTERVAL 1 DAY
SELECT ‘2016-12-31 23:59:59' + INTERVAL 1 SECOND
SELECT ‘2016-12-31 23:59:59' + INTERVAL “1:1” MINUTE_SECOND

返回结果:

-> 2015-12-31 23:59:59
-> 2015-12-31
-> 2017-01-01 00:00:00
-> 2017-01-01 00:01:00

17、DATE_SUB(date,INTERVAL number type),同 SUBDATE()

用法和DATE_ADD()与ADDDATE()类似,一个是加,一个是减,用时参照16点,具体用法请参考DATE_ADD()与ADDDATE()。

18、TO_DAYS(date)

SELECT TO_DAYS(‘2016-01-16')
SELECT TO_DAYS(‘20160116')
SELECT TO_DAYS(‘160116')
-> 736344
-> 736344
-> 736344

返回西元0年至日期date是总共多少天

19、FROM_DAYS(date)

SELECT FROM_DAYS(367)
-> 0001-01-02

返回西元0年至今多少天的DATE值

20、DATE_FORMAT(date,format):根据参数对date进行格式化。

SELECT DATE_FORMAT(‘2016-01-16 22:23:00','%W %M %Y')
SELECT DATE_FORMAT(‘2016-01-16 22:23:00','%D %y %a %d %m %b %j')
SELECT DATE_FORMAT(‘2016-01-16 22:23:00','%H %k %I %r %T %S %w')
SELECT DATE_FORMAT(‘2016-01-16 22:23:00','%Y-%m-%d %H:%i:%s')
-> Saturday January 2016
-> 16th 16 Sat 16 01 Jan 016
-> 22 22 10 10:23:00 PM 22:23:00 00 6
-> 2016-01-16 22:23:00

format的格式都列出来:

%M 月名字(January……December)
    %W 星期名字(Sunday……Saturday)
    %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
    %Y 年, 数字, 4 位
    %y 年, 数字, 2 位
    %a 缩写的星期名字(Sun……Sat)
    %d 月份中的天数, 数字(00……31)
    %e 月份中的天数, 数字(0……31)
    %m 月, 数字(01……12)
    %c 月, 数字(1……12)
    %b 缩写的月份名字(Jan……Dec)
    %j 一年中的天数(001……366)
    %H 小时(00……23)
    %k 小时(0……23)
    %h 小时(01……12)
    %I 小时(01……12)
    %l 小时(1……12)
    %i 分钟, 数字(00……59)
    %r 时间,12 小时(hh:mm:ss [AP]M)
    %T 时间,24 小时(hh:mm:ss)
    %S 秒(00……59)
    %s 秒(00……59)
    %p AM或PM
    %w 一个星期中的天数(0=Sunday ……6=Saturday )
    %U 星期(0……52), 这里星期天是星期的第一天
    %u 星期(0……52), 这里星期一是星期的第一天
    %% 字符% )

TIME_FORMAT(time,format):
具体用法和DATE_FORMAT()类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)

21、获取系统当前日期

SELECT CURDATE()
SELECT CURRENT_DATE()
-> 2016-01-16
-> 2016-01-16

22、获取系统当前时间

SELECT CURTIME()
SELECT CURRENT_TIME()
-> 17:44:22
-> 17:44:22

23、NOW(),SYSDATE(),CURRENT_TIMESTAMP(),LOCALTIME():获取系统当前日期和时间

SELECT NOW()
SELECT SYSDATE()
SELECT CURRENT_TIMESTAMP()
SELECT CURRENT_TIMESTAMP
SELECT LOCALTIME()
SELECT LOCALTIME
-> 2016-01-16 17:44:41
-> 2016-01-16 17:44:41
-> 2016-01-16 17:44:41
-> 2016-01-16 17:44:41
-> 2016-01-16 17:44:41
-> 2016-01-16 17:44:41

24、UNIX_TIMESTAMP(date):获取时间戳

SELECT UNIX_TIMESTAMP()
SELECT UNIX_TIMESTAMP(‘2016-01-16')
SELECT UNIX_TIMESTAMP(‘2016-01-16 23:59:59')
-> 1452937627
-> 1452873600
-> 1452959999

25、FROM_UNIXTIME(unix_timestamp,format):把时间戳转化成日期时间

SELECT FROM_UNIXTIME(1452959999)
SELECT FROM_UNIXTIME(1452959999,'%Y-%m-%d %H:%i:%s')
-> 2016-01-16 23:59:59
-> 2016-01-16 23:59:59

26、SEC_TO_TIME(seconds):把秒数转化成时间

SELECT SEC_TO_TIME(2378)
-> 00:39:38

27、TIME_TO_SEC(time):把时间转化成秒数

SELECT TIME_TO_SEC(‘22:23:00')
-> 2378

28、ADDTIME(time,times):把times加到time上

SELECT ADDTIME(“2015-12-31 23:59:59”,'01:01:01')
-> 2016-01-01 01:01:00

29、CONVERT_TZ(date,from_tz ,to_tz ):转换时区

SELECT CONVERT_TZ(‘2004-01-01 12:00:00','+00:00','+10:00')
-> 2004-01-01 22:00:00

30、STR_TO_DATE(date,format ):将字符串转成format格式的日期时间

SELECT STR_TO_DATE(‘2015-01-01', ‘%Y-%m-%d')
-> 2015-01-01

31、LAST_DAY(date ):获取date当月最后一天的日期

SELECT LAST_DAY(SYSDATE())
SELECT LAST_DAY(‘2015-02-02')
SELECT LAST_DAY(‘2015-02-02 00:22:33')
-> 2016-01-31
-> 2015-02-28
-> 2015-02-28

32、MAKEDATE(year ,dayofyear ):根据参数(年份,第多少天)获取日期

SELECT MAKEDATE(2015 ,32)
-> 2015-02-01

33、 MAKETIME(hour ,minute ,second ):根据参数(时,分,秒)获取时间

SELECT MAKETIME(12 ,23 ,34 )
-> 12:23:34

34、YEARWEEK(date):获取日期的年和周

SELECT YEARWEEK(SYSDATE())
SELECT YEARWEEK(‘2015-01-10')
SELECT YEARWEEK(‘2015-01-10',1)
-> 201602
-> 201501
-> 201502

35、WEEKOFYEAR(date):获取当日是当年的第几周

SELECT WEEKOFYEAR(SYSDATE())
SELECT WEEKOFYEAR(‘2015-01-10')
-> 2
-> 2

-> 2
-> 2

mysql中常用的几种时间格式转换函数整理如下

1,from_unixtime(timestamp, format):

timestamp为int型时间,如14290450779;format为转换的格式,包含格式如下:

%M 月名字(January……December) 
%W 星期名字(Sunday……Saturday) 
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) 
%Y 年, 数字, 4 位 
%y 年, 数字, 2 位 
%a 缩写的星期名字(Sun……Sat) 
%d 月份中的天数, 数字(00……31) 
%e 月份中的天数, 数字(0……31) 
%m 月, 数字(01……12) 
%c 月, 数字(1……12) 
%b 缩写的月份名字(Jan……Dec) 
%j 一年中的天数(001……366) 
%H 小时(00……23) 
%k 小时(0……23) 
%h 小时(01……12) 
%I 小时(01……12) 
%l 小时(1……12) 
%i 分钟, 数字(00……59) 
%r 时间,12 小时(hh:mm:ss [AP]M) 
%T 时间,24 小时(hh:mm:ss) 
%S 秒(00……59) 
%s 秒(00……59) 
%p AM或PM 
%w 一个星期中的天数(0=Sunday ……6=Saturday ) 
%U 星期(0……52), 这里星期天是星期的第一天 
%u 星期(0……52), 这里星期一是星期的第一

2,unix_timestamp(date):

作用与from_unixtime()刚好相反,前者是把unix时间戳转换为可读的时间,而unix_timestamp()是把可读的时间转换为unix时间戳,这在对datetime存储的时间进行排序时会用到。如unix_timestamp('2009-08-06 10:10:40'),得到1249524739。

如果unix_timestamp()不传参数,则调用now()函数自动取当前时间。

3,date_format(date, format):

date_format()是将date或datetime类型值转换为任意的时间格式。比如常见的应用场景,某表有一个字段是更新时间,存储的是datetime类型,但前台展示时只需要显示年月日(xxxx-xx-xx),这个时候就可以用date_format(date,'%Y-%m-%d ')处理,而不需要在结果集中用程序循环处理。

您可能感兴趣的文章:

  • Mysql根据时间查询日期的优化技巧
  • mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
  • 解析MySQL中存储时间日期类型的选择问题
  • JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql
  • MySQL 获得当前日期时间 函数
  • 浅谈MySQL数据库中日期中包含零值的问题
  • MySQL查询两个日期之间记录的方法
  • 详解MySQL日期 字符串 时间戳互转
  • 详解mysql 获取当前日期及格式化
  • mysql中格式化日期详解
  • mysql如何查询两个日期之间最大的连续登录天数
  • mysql日期date型和int型互换的方法
  • mysql记录根据日期字段倒序输出
  • mysql常用日期时间/数值函数详解(必看)
  • MySql判断汉字、日期、数字的具体函数
  • MySQL中日期和时间戳互相转换的函数和方法
  • Mysql获取当前日期的前几天日期的方法
  • mysql 获取当前日期函数及时间格式化参数详解
(0)

相关推荐

  • mysql 获取当前日期函数及时间格式化参数详解

    MYSQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 2009-12-25 14:38:59 select now(); 输出 09-12-25 select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59) %I, %i 两位数字形

  • mysql日期date型和int型互换的方法

    一.date型转换成int型 UNIX_TIMESTAMP('1997-10-04 22:23:00')  =====> 875996580 二.int型转换成date型 FROM_UNIXTIME(875996580) =====> '1997-10-04 22:23:00' PHP里面将int型数据转换成日期输出 echo date('Y-m-d',$date); PHP里面将date型数据输出: echo $date; PHP里面将date型数据转换成int型: strtotime($d

  • MySQL中日期和时间戳互相转换的函数和方法

    ① 时间戳转换成日期 复制代码 代码如下: FROM_UNIXTIME 例如: 数据表中 invest_time 存储的是时间戳,如 1429063399 使用 FROM_UNIXTIME 可以把时间戳转换为日期: 复制代码 代码如下: select FROM_UNIXTIME(invest_time,'%Y年%m月%d') from crm_invest_apply 执行结果: ② 把日期转换为时间戳,和 FROM_UNIXTIME 正好相反 复制代码 代码如下: UNIX_TIMESTAMP

  • mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间

    1.当前日期 select DATE_SUB(curdate(),INTERVAL 0 DAY) ; 2.明天日期 select DATE_SUB(curdate(),INTERVAL -1 DAY) ; 3.昨天日期 select DATE_SUB(curdate(),INTERVAL 1 DAY) ; 4.前一个小时时间 select date_sub(now(), interval 1 hour); 5.后一个小时时间 select date_sub(now(), interval -1

  • 浅谈MySQL数据库中日期中包含零值的问题

    默认情况下MySQL是可以接受在日期中插入0值,对于现实来说日期中的0值又没有什么意义.调整MySQL的sql_mode变量就能达到目的. set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION'; set @@session.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION'; 例子: 有一个用于记录日志的表 c

  • 解析MySQL中存储时间日期类型的选择问题

    一般应用中,我们用timestamp,datetime,int类型来存储时间格式: int(对应javaBean中的Integer或int) 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datetime(javaBean中用Date类型) 1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值. 3. 实际格式储存(Just stores w

  • MySql判断汉字、日期、数字的具体函数

    几个平常用的mysql函数,MySql判断汉字.日期.数字的具体函数分享给大家,具体内容如下 1.判断字符串是否为汉字 返回值:1-汉字 0-非汉字 DROP FUNCTION IF EXISTS fc_is_hanzi; CREATE FUNCTION fc_is_hanzi( p_str VARCHAR(1024) ) RETURNS int(11) NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT '检查字符串是否为汉字' BEGIN /*检查字

  • mysql记录根据日期字段倒序输出

    我们知道倒序输出是很简单的 select * from table order by id desc 直接这样就可以 那么现在的问题在于日期字段怎么来倒序输出 这里我们用到cast()来将指定的字段转换为我们需要的类型 如下是实际项目中的sql语句 select * from water where phoneNumber=@phoneNumber order by cast(date as datetime) desc 我们说学而不思则罔,我们来思考下深层次的内容. 经过查阅资料得知类型的转换

  • mysql如何查询两个日期之间最大的连续登录天数

    前言 最近工作中遇到一个需求,是根据用户连续记录天数来计算的,求出用户在一段时间内最大的连续记录时间,例如在 2016-01-01 和 2016-01-28 之间,如果用户在3号和4号都记录了,那么连续记录天数为2,如果用户在6号-10号每日都记录了,那么最大连续记录天数为5. 拿到这个需求的时候,说实话有点懵,第一想到的就是在代码中去统计,会用到循环,想到那么多个用户,并且时间跨度也有点大,比如15年到16年,两年时间,想想就有点恐怖. 解决方案 然后就把这个需求跟朋友说了,朋友也觉得有点难搞

  • MySQL 获得当前日期时间 函数

    获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | now() | +---------------------+ | 2008-08-08 22:20:46 | +---------------------+ 获得当前日期+时间(date + time)函数:sysdate() sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysd

  • 详解mysql 获取当前日期及格式化

    MySQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 2009-12-25 14:38:59 select now(); 输出 09-12-25 select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59) %I, %i 两位数字形

  • JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

    前言 相信大家应该都知道,在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等字段 但是,java.sql.Date.java.sql.Timestamp.java.util.Date这些类都不好用,很多方法都过时了. Java8里面新出来了一些API,LocalDate.LocalTime.LocalDateTime 非常好用 如果想要在JDBC中,使用Ja

  • Mysql获取当前日期的前几天日期的方法

    如:获得 2015-03-01 日的前7天的日期 : 复制代码 代码如下: select date_sub('2015-03-01',interval 7 day) from rs_pay_data; 输出: 2015-02-22

  • Mysql根据时间查询日期的优化技巧

    例如查询昨日新注册用户,写法有如下两种: EXPLAIN select * from chess_user u where DATE_FORMAT(u.register_time,'%Y-%m-%d')='2018-01-25'; EXPLAIN select * from chess_user u where u.register_time BETWEEN '2018-01-25 00:00:00' and '2018-01-25 23:59:59'; register_time字段是date

  • MySQL查询两个日期之间记录的方法

    网上搜索出来的结果多是下面答案: MySQL中,如何查询两个日期之间的记录,日期所在字段的类型为datetime(0000-00-00 00:00:00) 解决方案: 直接使用><=就可以查询. where createDate<'2003-5-31' and createDate>'2003-2-30'; 其实简单美好的写法可以是这样的 where createDate between'2010-08-01'  and  '2010-08-19' 看完了之后,你是不是觉得后者比较

  • mysql常用日期时间/数值函数详解(必看)

    1.日期时间函数 时间转化秒函数:time_to_sec MySQL> select time_to_sec('01:01:01'); +-------------------------+ | time_to_sec('01:01:01') | +-------------------------+ | 3661 | +-------------------------+ 1 row in set (0.00 sec) 秒转化时间函数:sec_to_time mysql> select se

  • mysql中格式化日期详解

    1. DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. DATE_FORMAT(date,format) format参数的格式有 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) %f 微秒 %H 小时 (00-23) %h 小时 (01-12) %I 小时 (01-12) %i 分钟,数值(00-59) %j 年的天 (001-366) %k 小时 (0-23) %l 小时 (

  • 详解MySQL日期 字符串 时间戳互转

    平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法:本文将作为一个笔记,整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转date.字符串转时间戳.时间戳转date,时间戳转字符串)用法,方便日后查看: 涉及的函数 date_format(date, format) 函数,MySQL日期格式化函数date_format() unix_timestamp() 函数 str_to_date(str, format) 函数 fro

随机推荐