热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库的九个日期函数&&时间比较

1、NOW获取当前日期和时间的函数。语法:NOW()例如:selectNOW();2、CURDATE获取当前的日期语法:CURDATE()3、CU

1、NOW

 获取当前日期和时间的函数。

 语法: NOW()

 例如:select NOW();

 

2、CURDATE

 获取当前的日期

 语法:CURDATE()

 

3、CURTIME()

 获取当前时间

 语法:CURTIME()

 

4、DATE

 获取日期时间或者日期的日期部分

 语法:DATE(date)

 date 参数是合法的日期表达式。

例如:

 

5、EXTRACT

 获取返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

 语法:EXTRACT(unit FROM date)

 date 参数是合法的日期表达式。

 unit 参数可以是下列的值:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH

 例如获取当前年月:select EXTRACT(YEAR_MONTH FROM '2017-01-02 23:11:45') ;

 

 

 

 

6、DATE_ADD

 将日期添加指定的时间间隔。

 语法:DATE_ADD(date,INTERVAL expr type)

 date 参数是合法的日期表达式。expr 参数是添加的时间间隔。

 type 参数可以是下列值:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH

 例如:select DATE_ADD(now(),INTERVAL 2 DAY); //获取两天后的时间

 7、DATE_SUB

 将日期减去指定的时间间隔。

 语法:DATE_SUB(date,INTERVAL expr type)

 date 参数是合法的日期表达式。expr 参数是添加的时间间隔。

 type 参数可以是下列值:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH

 例如:select DATE_SUB(now(),INTERVAL 2 DAY); //获取两天前的时间

   

8、DATEDIFF

 获取两个日期之间的天数。(只有日期部分参与计算)

 语法:DATEDIFF(date1,date2)

 date1 和 date2 参数是合法的日期或日期/时间表达式。

 例如:SELECT DATEDIFF(NOW(),'2008-08-08') AS 北京奥运会多天前;

  

  赶巧算一下我多大了,哎已经23岁半了,岁月不饶人啊,言归正传,这里是dete1-date2的日期部分,所以我查出来的是负数

 

9、DATEFORMAT

 格式化日期时间 

语法:DATE_FORMAT(date,format)

 date 参数是合法的日期。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:小时 (1-12)

%M:月名

%m:月,数值(00-12)

%p:AM 或 PM

%r:时间,12-小时(hh:mm:ss AM 或 PM)

%S:秒(00-59)

%s:秒(00-59)

%T:时间, 24-小时 (hh:mm:ss)

%U:周 (00-53) 星期日是一周的第一天

%u:周 (00-53) 星期一是一周的第一天

%V:周 (01-53) 星期日是一周的第一天,与 %X 使用

%v:周 (01-53) 星期一是一周的第一天,与 %x 使用

%W:星期名

%w:周的天 (0=星期日, 6=星期六)

%X:年,其中的星期日是周的第一天,4 位,与 %V 使用

%x:年,其中的星期一是周的第一天,4 位,与 %v 使用

%Y:年,4 位

%y:年,2 位

 

 

 

数据库对日期进行比较

原则是先把两个日期的格式统一一下,然后把日期字符串转化为日期,最后进行比较

转化为日期的两个时间可以做加减运算得出的结果为天数.

结果*24则得出的是小时数

结果*24*60得出的是分钟数

结果*24*60*60得出的是秒数

ceil((To_date(to_char(sysdate, 'yyyy-MM-dd HH24:mi:ss'),'yyyy-mm-dd hh24-mi-ss') -

            To_date(GXSJ, 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60) > 10

计算两个日期相差的分钟数

ceil和floor函数在一些业务数据的时候,有时还是很有用的。

ceil(n) 取大于等于数值n的最小整数;

floor(n)取小于等于数值n的最大整数

 

select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update <= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

在今天只后:

select * from up_date where update > to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update >= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

精确时间:

select * from up_date where update = to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

在某段时间内:

select * from up_date where update between to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and update > to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update <= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and update >= to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

 

mysql中日期的比较

select * from student where '2012-02-27 00:00:00' created_date

select * from student where UNIX_TIMESTAMP('2012-02-27 00:00:00') UNIX_TIMESTAMP(created_date);

SELECT * FROM student WHERE (UNIX_TIMESTAMP(created_date) - UNIX_TIMESTAMP('2012-02-26 00:00:00') ) >= 0 AND (UNIX_TIMESTAMP(created_date) - UNIX_TIMESTAMP('2012-02-29 00:00:00') ) <= 0

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' )

 

mysql中多条件判断:

要求日期在2017-12-28,且city这一列的值为Beijing,SQL语句如下:

SELECT * FROM table_name where UNIX_TIMESTAMP(flightDate)=UNIX_TIMESTAMP('2017-12-28') and city='Beijing';

 

 

这篇文章主要介绍了Mysql中日期比较大小的方法,需要的朋友可以参考下

 

假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:

 代码如下

?

1

select * from product where add_time = '2013-01-12'

对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理:

 代码如下

?

1

select * from product  where  Date(add_time) = '2013-01-12'

再来一个,如果你要查询2013年1月份加入的产品呢?

 代码如下

?

1

select * from product where date(add_time) between '2013-01-01' and '2013-01-31'

你还可以这样写:

?

1

select * from product where Year(add_time) = 2013 and Month(add_time) = 1

 

这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?

其date_col的值是在最后30天以内:

 代码如下

?

1

2

3

mysql> SELECT something FROM table

 WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

DAYOFWEEK(date)

返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。

 代码如下

?

 

1

2

3

mysql> select DAYOFWEEK('1998-02-03');

 -> 3

WEEKDAY(date)

返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

 代码如下

?

1

2

3

4

5

mysql> select WEEKDAY('1997-10-04 22:23:00');

 -> 5

 mysql> select WEEKDAY('1997-11-05');

 -> 2

DAYOFMONTH(date)

返回date的月份中日期,在1到31范围内。

 代码如下

?

1

2

3

mysql> select DAYOFMONTH('1998-02-03');

 -> 3

DAYOFYEAR(date)

 

返回date在一年中的日数, 在1到366范围内。

 代码如下

?

1

2

3

mysql> select DAYOFYEAR('1998-02-03');

 -> 34

MONTH(date)

 

返回date的月份,范围1到12。

 代码如下

?

1

2

3

mysql> select MONTH('1998-02-03');

 -> 2

DAYNAME(date)

返回date的星期名字。

 代码如下

?

1

2

3

mysql> select DAYNAME("1998-02-05");

 -> 'Thursday'

MONTHNAME(date)

返回date的月份名字。

 代码如下

?

1

2

3

mysql> select MONTHNAME("1998-02-05");

 -> 'February'

QUARTER(date)

返回date一年中的季度,范围1到4。

 代码如下

?

1

2

mysql> select QUARTER('98-04-01');

 -> 2

 

 


推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
author-avatar
清响11
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有