Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 253|回复: 0

[默认分类] mysql中时间比较的实现

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-10 11:16:23 | 显示全部楼层 |阅读模式


      
       
    MySql中时间比较的实现
      
      
       
      
      
       unix_timestamp 函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970-01-01 00:00:00到指定时间所经历的秒数。有了这个函数,就可以很自然地把时间比较转换为一个无符号整数的比较。
      
      
       
      
      
       例如,判断一个时间是否在一个区间内
      
      
       
      
      
       unix_timestamp( time ) between unix_timestamp( "start ") and unix_timestamp( "end" )
      
      
       
      
      
       对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。 
      
      
       
      
      
       这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: 
      
      
       
      
      
       mysql> SELECT something FROM table 
      
      
       WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; 
      
      
       
      
      
       DAYOFWEEK(date) 
      
      
       返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。 
      
      
       mysql> select DAYOFWEEK("1998-02-03"); 
      
      
       -> 3 
      
      
       
      
      
       WEEKDAY(date) 
      
      
       返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。 
      
      
       mysql> select WEEKDAY("1997-10-04 22:23:00"); 
      
      
       -> 5 
      
      
       mysql> select WEEKDAY("1997-11-05"); 
      
      
       -> 2 
      
      
       
      
      
       DAYOFMONTH(date) 
      
      
       返回date的月份中日期,在1到31范围内。 
      
      
       mysql> select DAYOFMONTH("1998-02-03"); 
      
      
       -> 3 
      
      
       
      
      
       DAYOFYEAR(date) 
      
      
       返回date在一年中的日数, 在1到366范围内。 
      
      
       mysql> select DAYOFYEAR("1998-02-03"); 
      
      
       -> 34 
      
      
       
      
      
       MONTH(date) 
      
      
       返回date的月份,范围1到12。 
      
      
       mysql> select MONTH("1998-02-03"); 
      
      
       -> 2 
      
      
       
      
      
       DAYNAME(date) 
      
      
       返回date的星期名字。 
      
      
       mysql> select DAYNAME("1998-02-05"); 
      
      
       -> "Thursday" 
      
      
       
      
      
       MONTHNAME(date) 
      
      
       返回date的月份名字。 
      
      
       mysql> select MONTHNAME("1998-02-05"); 
      
      
       -> "February"  www.2cto.com   
      
      
       
      
      
       QUARTER(date) 
      
      
       返回date一年中的季度,范围1到4。 
      
      
       mysql> select QUARTER("98-04-01"); 
      
      
       -> 2 
      
      
       
      
      
       WEEK(date) 
      
      
       
      
      
       WEEK(date,first) 
      
      
       对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许  
      
      
       你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,  
      
      
       从星期一开始。 
      
      
       mysql> select WEEK("1998-02-20"); 
      
      
       -> 7 
      
      
       mysql> select WEEK("1998-02-20",0); 
      
      
       -> 7 
      
      
       mysql> select WEEK("1998-02-20",1); 
      
      
       -> 8 
      
      
       
      
      
       YEAR(date) 
      
      
       返回date的年份,范围在1000到9999。 
      
      
       mysql> select YEAR("98-02-03"); 
      
      
       -> 1998 
      
      
       
      
      
       HOUR(time) 
      
      
       返回time的小时,范围是0到23。 
      
      
       mysql> select HOUR("10:05:03"); 
      
      
       -> 10 
      
      
       
      
      
       MINUTE(time) 
      
      
       返回time的分钟,范围是0到59。 
      
      
       mysql> select MINUTE("98-02-03 10:05:03"); 
      
      
       -> 5 
      
      
       
      
      
       SECOND(time) 
      
      
       回来time的秒数,范围是0到59。 
      
      
       mysql> select SECOND("10:05:03"); 
      
      
       -> 3 
      
      
       
      
      
       PERIOD_ADD(P,N) 
      
      
       增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。 
      
      
       mysql> select PERIOD_ADD(9801,2); 
      
      
       -> 199803 
      
      
       
      
      
       PERIOD_DIFF(P1,P2) 
      
      
       返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。 
      
      
       mysql> select PERIOD_DIFF(9802,199703); 
      
      
       -> 11 
      
      
       
      
      
       DATE_ADD(date,INTERVAL expr type) 
      
      
       
      
      
       DATE_SUB(date,INTERVAL expr type) 
      
      
       
      
      
       ADDDATE(date,INTERVAL expr type) 
      
      
       
      
      
       SUBDATE(date,INTERVAL expr type) 
      
      
       这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。  
      
      
       在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的  
      
      
       DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以  
      
      
       一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期  
      
      
       中返回“type”间隔。下表显示了type和expr参数怎样被关联: type值 含义 期望的expr格式 
      
      
       
      
      
       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" 
      
      
       
      
      
       MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅  
      
      
       包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。 
      
      
       
      
      
       mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; 
      
      
       -> 1998-01-01 00:00:00   www.2cto.com   
      
      
       mysql> SELECT INTERVAL 1 DAY + "1997-12-31"; 
      
      
       -> 1998-01-01 
      
      
       mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; 
      
      
       -> 1997-12-31 23:59:59 
      
      
       mysql> SELECT DATE_ADD("1997-12-31 23:59:59", 
      
      
       INTERVAL 1 SECOND); 
      
      
       -> 1998-01-01 00:00:00 
      
      
       mysql> SELECT DATE_ADD("1997-12-31 23:59:59", 
      
      
       INTERVAL 1 DAY); 
      
      
       -> 1998-01-01 23:59:59 
      
      
       mysql> SELECT DATE_ADD("1997-12-31 23:59:59", 
      
      
       INTERVAL "1:1" MINUTE_SECOND); 
      
      
       -> 1998-01-01 00:01:00 
      
      
       mysql> SELECT DATE_SUB("1998-01-01 00:00:00", 
      
      
       INTERVAL "1 1:1:1" DAY_SECOND); 
      
      
       -> 1997-12-30 22:58:59 
      
      
       mysql> SELECT DATE_ADD("1998-01-01 00:00:00", 
      
      
       INTERVAL "-1 10" DAY_HOUR); 
      
      
       -> 1997-12-30 14:00:00 
      
      
       mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); 
      
      
       -> 1997-12-02 
      
      
       mysql> SELECT EXTRACT(YEAR FROM "1999-07-02"); 
      
      
       -> 1999 
      
      
       mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); 
      
      
       -> 199907 
      
      
       mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); 
      
      
       -> 20102 
      
      
       
      
      
       如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,  
      
      
       如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,  
      
      
       MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND  
      
      
       的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,  
      
      
       结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。 
      
      
       
      
      
       mysql> select DATE_ADD("1998-01-30", Interval 1 month); 
      
      
       -> 1998-02-28 
      
      
       
      
      
       注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。 
      
      
       TO_DAYS(date) 
      
      
       给出一个日期date,返回一个天数(从0年的天数)。 
      
      
       mysql> select TO_DAYS(950501); 
      
      
       -> 728779 
      
      
       mysql> select TO_DAYS("1997-10-07"); 
      
      
       -> 729669 
      
      
       
      
      
       TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。 
      
      
       
      
      
       FROM_DAYS(N) 
      
      
       给出一个天数N,返回一个DATE值。 
      
      
       mysql> select FROM_DAYS(729669); 
      
      
       -> "1997-10-07" 
      
      
       
      
      
       TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。 
      
      
       
      
      
       DATE_FORMAT(date,format) 
      
      
       根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)   www.2cto.com   
      
      
       %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), 这里星期一是星期的第一天 
      
      
       %% 一个文字“%”。 
      
      
       
      
      
       所有的其他字符不做解释被复制到结果中。 
      
      
       
      
      
       mysql> select DATE_FORMAT("1997-10-04 22:23:00", "%W %M %Y"); 
      
      
       -> "Saturday October 1997" 
      
      
       mysql> select DATE_FORMAT("1997-10-04 22:23:00", "%H:%i:%s"); 
      
      
       -> "22:23:00" 
      
      
       mysql> select DATE_FORMAT("1997-10-04 22:23:00", 
      
      
       "%D %y %a %d %m %b %j"); 
      
      
       -> "4th 97 Sat 04 10 Oct 277" 
      
      
       mysql> select DATE_FORMAT("1997-10-04 22:23:00", 
      
      
       "%H %k %I %r %T %S %w"); 
      
      
       -> "22 22 10 10:23:00 PM 22:23:00 00 6" 
      
      
       MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。 
      
      
       
      
      
       TIME_FORMAT(time,format) 
      
      
       这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。  
      
      
       其他修饰符产生一个NULL值或0。 
      
      
       CURDATE() 
      
      
       
      
      
       CURRENT_DATE 
      
      
       以"YYYY-MM-DD"或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。 
      
      
       mysql> select CURDATE(); 
      
      
       -> "1997-12-15" 
      
      
       mysql> select CURDATE() + 0; 
      
      
       -> 19971215 
      
      
       
      
      
       CURTIME() 
      
      
       
      
      
       CURRENT_TIME 
      
      
       以"HH:MM:SS"或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。 
      
      
       mysql> select CURTIME(); 
      
      
       -> "23:50:26" 
      
      
       mysql> select CURTIME() + 0; 
      
      
       -> 235026 
      
      
       
      
      
       NOW() 
      
      
       
      
      
       SYSDATE() 
      
      
       
      
      
       CURRENT_TIMESTAMP 
      
      
       以"YYYY-MM-DD HH:MM:SS"或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的    www.2cto.com  
      
      
       上下文被使用。 
      
      
       mysql> select NOW(); 
      
      
       -> "1997-12-15 23:50:26" 
      
      
       mysql> select NOW() + 0; 
      
      
       -> 19971215235026 
      
      
       
      
      
       UNIX_TIMESTAMP() 
      
      
       
      
      
       UNIX_TIMESTAMP(date) 
      
      
       如果没有参数调用,返回一个Unix时间戳记(从"1970-01-01 00:00:00"GMT开始的秒数)。如果UNIX_TIMESTAMP()用一  
      
      
       个date参数被调用,它返回从"1970-01-01 00:00:00" GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME  
      
      
       字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。 
      
      
       mysql> select UNIX_TIMESTAMP(); 
      
      
       -> 882226357 
      
      
       mysql> select UNIX_TIMESTAMP("1997-10-04 22:23:00"); 
      
      
       -> 875996580 
      
      
       
      
      
       当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。 
      
      
       
      
      
       FROM_UNIXTIME(unix_timestamp) 
      
      
       以"YYYY-MM-DD HH:MM:SS"或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串  
      
      
       还是或数字上下文中被使用。 
      
      
       mysql> select FROM_UNIXTIME(875996580); 
      
      
       -> "1997-10-04 22:23:00" 
      
      
       mysql> select FROM_UNIXTIME(875996580) + 0; 
      
      
       -> 19971004222300   www.2cto.com   
      
      
       
      
      
       FROM_UNIXTIME(unix_timestamp,format) 
      
      
       返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条  
      
      
       目同样的修饰符。 
      
      
       mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(), 
      
      
       "%Y %D %M %h:%i:%s %x"); 
      
      
       -> "1997 23rd December 03:43:30 x" 
      
      
       
      
      
       SEC_TO_TIME(seconds) 
      
      
       返回seconds参数,变换成小时、分钟和秒,值以"HH:MM:SS"或HHMMSS格式化,取决于函数是在一个字符串还是在数字  
      
      
       上下文中被使用。 
      
      
       mysql> select SEC_TO_TIME(2378); 
      
      
       -> "00:39:38" 
      
      
       mysql> select SEC_TO_TIME(2378) + 0; 
      
      
       -> 3938 
      
      
       
      
      
       TIME_TO_SEC(time) 
      
      
       返回time参数,转换成秒。 
      
      
       mysql> select TIME_TO_SEC("22:23:00"); 
      
      
       -> 80580 
      
      
       mysql> select TIME_TO_SEC("00:39:38"); 
      
      
       -> 2378  
      
      
       
      
      
       
      
      
       
      
      
       作者 晓风残月1990
       

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-19 08:52 , Processed in 0.441402 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表