Mysql时间函数用法

Mysql时间函数用法

NOW,CURDATE,CURTIME

NOW() 函数返回当前的日期和时间。

例子:

SELECT NOW(),CURDATE(),CURTIME()
NOW()CURDATE()CURTIME()
2020-10-12 13:52:122020-10-1213:53:06

NOW()还有3个同义词,效果跟NOW()一样,而且都有2种形式写法:

LOCALTIME或LOCALTIME()
LOCALTIMESTAMP或LOCALTIMESTAMP()
CURRENT_TIMESTAMP或CURRENT_TIMESTAMP()

这些函数还可以直接在SQL里加减:

-- 查询创建时间2天以内的数据,需要加interval关键字,day也是关键字
select *
from equ_alert
where del_flag = '0'
and create_time >= now() - interval 2 day

SYSDATE

NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间。

因为NOW()取自mysql的一个变量”TIMESTAMP”,而这个变量在语句开始执行的时候就设定好了,因此在整个语句执行过程中都不会变化。

执行下面这个例子就明白了:

SELECT NOW(),SYSDATE(),SLEEP(3),NOW(),SYSDATE()

先查询了NOW()和SYSDATE(),然后sleep了3秒,再查询NOW()和SYSDATE(),结果如下:

now()sysdate()sleep(3)now()1sysdate()1
2021-09-03 10:10:122021-09-03 10:10:1202021-09-03 10:10:122021-09-03 10:10:15

DATE,YEAR,MONTH等

类似的还有:

year(),
month().....等
monthname() 英文的月,
select year(now());  # 传入一个时间
select year('1998-1-1'); # 也可以传入一个字符串时间或者字段名

DATE() 函数返回日期或日期/时间表达式的日期部分。

假设我们有如下的表:

OrderIdProductNameOrderDate
1‘Computer’2008-12-29 16:25:46.635

我们使用下面的 SELECT 语句:

SELECT ProductName, DATE(OrderDate) AS OrderDate
FROM Orders
WHERE OrderId=1

查询结果:

ProductNameOrderDate
‘Computer’2008-12-29

DateDiff

DATEDIFF() 函数返回两个日期之间的天数。

语法:

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

例子:

SELECT DATEDIFF('2008-12-30','2008-12-29')  结果是1
SELECT DATEDIFF('2008-12-29','2008-12-30')  结果是-1

实例练习:

查询7天之内到期的订单

select * 
from `order` 
where DateDiff(end_time,NOW()) <= 7
and end_time >= NOW()
and `status` = 'CHECK_IN'

DATE_ADD

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    

假设我们有如下的表:

OrderIdProductNameOrderDate
1‘Computer’2008-12-29 16:25:46.635

现在,我们希望向 “OrderDate” 添加 2 天,我们使用下面的 SELECT 语句:

SELECT OrderId,DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM Orders

结果:

OrderIdOrderPayDate
12008-12-31 16:25:46.635

实例练习:

查询7天之内到期的订单

select * 
from `order`
where end_time <= DATE_ADD(NOW(),INTERVAL 7 DAY)
and end_time >= NOW()
and `status` = 'CHECK_IN'

DATE_SUB

用法与DATE_ADD相同。从日期减去指定的时间间隔。

SEC_TO_TIME

秒数转时间

select SEC_TO_TIME(45);

显示:00:00:45

TIME_TO_SEC

时间转秒数

select TIME_TO_SEC('00:01:01');

显示:61

str_to_date

-- 将字符通过指定的格式转换成日期(格式参考下面的SQL日期格式表)
select str_to_date('2012-1-2','%Y-%m-%d')

date_format

-- 将日期转换成字符串(格式参考下面的SQL日期格式表)
select date_format('1988_12_12','%Y-%m-%d') -- 查询出1988-12-12,相当于把下划线换成了小横杆,小横杆也可以自己选择换成别的

SQL日期格式表:
在这里插入图片描述

timestampdiff

此函数用来计算时间的差值,单位有:
● YEAR 年
● MONTH 月
● DAY 日
● HOUR 时
● MINUTE 分
● SECOND 秒
● MICROSECOND 微秒
● WEEK 周
● QUARTER 季度

-- timestampdiff(interval,datetime_expr1,datetime_expr2)   
select timestampdiff(day ,'2010-09-26 00:00:00','2011-09-26 00:00:00'); -- 结果是365天

from_unixtime

待维护

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值