MySQL IF()函數(類似三目運算符)

MySQL—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-即將過期
  • 結果:
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章