MySQL—IF函数—类似三目运算符
- 一、前言
- 二、IF()函数
一、前言
做项目时遇到需求,需要将车辆保险表的保险到期状态给区分显示(正常,即将到期,已过期),但是车辆保险表中并没有这个状态字段,所以得根据车辆保险时间去进行动态筛选出状态信息。
二、IF()函数
MySQL中的IF()函数作用类似于Java中的三目运算符,个人感觉在实际开发中使用可以避免多余的查询;
- 表达式:IF(expr,value1,value2)
- 说明:根据expr得到的结果,true返回value1 ,false返回 value2;
- 示例:
SELECT
t1.ciId,
t1.coid,
t1.carName,
t1.carLossStartDate,
t1.compulsoryEndDate,
t1.businessStartDate,
t1.businessEndDate,
t1.carStatus,
t1.companyname
FROM
(
SELECT
t1.ciid,
t1.coid,
t2.carname,
t1.carLossStartDate,
t1.compulsoryEndDate,
t1.businessStartDate,
t1.businessEndDate,
-- 这里使用if()函数进行了嵌套后达到需求效果,
-- 保险时间 <当前时间 or保险时间 =null-已过期,
-- 当前时间 <=保险时间 <=两个月后的当前时间-即将到期,
-- 否则则是-正常状态;
-- 简写: if(expr1,'1',if(expr2,'2','0'))
-- 保险状态说明 0-正常 1-已过期 2-即将过期
IF( ( t1.compulsoryEndDate < DATE_FORMAT( NOW( ), '%Y-%m-%d 00:00:00' ) ) or t1.compulsoryEndDate is null, '1',
IF(t1.compulsoryEndDate BETWEEN DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00') and DATE_FORMAT(DATE_ADD(NOW(),INTERVAL +2 MONTH),'%Y-%m-%d 00:00:00'),'2','0')) carStatus,
t1.companyname
FROM
vehicles_carinsurance t1
LEFT JOIN vehicles_car t2 ON t1.cid = t2.cid
WHERE
t2.is_delete = '0'
) t1
WHERE
t1.ciid = '67067'
and t1.carStatus = '2'
and t1.coid in ('16041')
ORDER BY
t1.compulsoryEndDate
- 这里使用if()函数进行了嵌套后达到需求效果:
1. 保险时间<当前时间or保险时间=null-已过期,
2. 当前时间<=保险时间<=两个月后的当前时间-即将到期,
3. 否则则是-正常状态;
4. 简写: if(expr1,‘1’,if(expr2,‘2’,‘0’))
5. 保险状态说明 0-正常 1-已过期 2-即将过期 - 结果: