场景
sql中处理时间是经常用到的,例如查询30分钟前支付的订单、3天后过期的会员码等,当然这种规格策略有很多实现方式,这里只是举一个例子,方便理解sql中函数的使用。
语法
adddate(d, n) // 当前日期加n天,n默认是天,也可以是分钟:adddate(d, interval 1 minute)
adddate(d, n) // 当前日期加n分钟
addtime(d, n) // 当前日期加n秒
subdate(d, n) // 当前时间减去n天,n默认是天,也可以是分钟:subdate(d, interval 1 minute)
subtime(d, n) // 当前时间减去n秒
datediff(d1, d2)// d1,d2的天数差值
使用
查询1天前支付的订单 order.payment_time(datetime)
select order_number, payment_time from `order` where subdate(`payment_time`, 1);
+--------------+---------------------+
| order_number | payment_time |
+--------------+---------------------+
| 2147483647 | 2020-04-04 17:25:52 |
+--------------+---------------------+
1 row in set (0.00 sec)
select order_number, payment_time from `order` where subdate(`payment_time`, interval 30 minute);
+--------------+---------------------+
| order_number | payment_time |
+--------------+---------------------+
| 2147483647 | 2020-04-04 17:25:52 |
+--------------+---------------------+
1 row in set (0.00 sec)
查询3天后过期的会员码 verify_code.expire_time(date)
select code, user_id, expire_date from verify_code where expire_date > adddate(current_date(), 3);
+--------------+---------+-------------+
| code | user_id | expire_date |
+--------------+---------+-------------+
| VD2003920KES | 121 | 2020-04-10 |
+--------------+---------+-------------+
1 row in set (0.00 sec)
查询user121会员还有几天过期verify_code.expire_time(date)
select code, user_id, expire_date, datediff(expire_date, current_date()) as expire_day from verify_code where user_id = 121;
+--------------+---------+-------------+------------+
| code | user_id | expire_date | expire_day |
+--------------+---------+-------------+------------+
| VD2003920KES | 121 | 2020-04-10 | 5 |
+--------------+---------+-------------+------------+
1 row in set (0.00 sec)
注意
使用函数之后,函数字段就不能使用索引了,所以灵活性还需要我们自己去把控