Mysql时间函数用法
NOW,CURDATE,CURTIME
NOW() 函数返回当前的日期和时间。
例子:
SELECT NOW(),CURDATE(),CURTIME()
NOW() | CURDATE() | CURTIME() |
---|---|---|
2020-10-12 13:52:12 | 2020-10-12 | 13: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()1 | sysdate()1 |
---|---|---|---|---|
2021-09-03 10:10:12 | 2021-09-03 10:10:12 | 0 | 2021-09-03 10:10:12 | 2021-09-03 10:10:15 |
DATE,YEAR,MONTH等
类似的还有:
year() 年,
month() 月
.....等
monthname() 英文的月,
select year(now()); # 传入一个时间
select year('1998-1-1'); # 也可以传入一个字符串时间或者字段名
DATE() 函数返回日期或日期/时间表达式的日期部分。
假设我们有如下的表:
OrderId | ProductName | OrderDate |
---|---|---|
1 | ‘Computer’ | 2008-12-29 16:25:46.635 |
我们使用下面的 SELECT 语句:
SELECT ProductName, DATE(OrderDate) AS OrderDate
FROM Orders
WHERE OrderId=1
查询结果:
ProductName | OrderDate |
---|---|
‘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
假设我们有如下的表:
OrderId | ProductName | OrderDate |
---|---|---|
1 | ‘Computer’ | 2008-12-29 16:25:46.635 |
现在,我们希望向 “OrderDate” 添加 2 天,我们使用下面的 SELECT 语句:
SELECT OrderId,DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM Orders
结果:
OrderId | OrderPayDate |
---|---|
1 | 2008-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
待维护