MySQL中有一个用于判断多种情况的语句,类似于java中的switch…case,在写SQL过程中需要用到case when嵌套,在这里记录一下,以防忘记。
简单例子:

SELECT
	CASE
WHEN ISNULL(work_order_no) THEN
	(CASE WHEN 2 > 1 THEN 11 ELSE 22 END)
ELSE
	(CASE WHEN 1 > 0 THEN 33 ELSE 66 END)
END
FROM
	qk_20030102
WHERE
	work_order_no = 'GD0000070324'

实际使用的例子:

SELECT
	work_order_no,
	CASE  --最外层case
WHEN UNIX_TIMESTAMP( --获取时间戳--
		STR_TO_DATE(--字符串转日期格式--
			chuangjian_time,
			'%Y-%m-%d %H:%i:%s'
		)
	) > UNIX_TIMESTAMP(
	STR_TO_DATE(
		CONCAT(
			substring(chuangjian_time, 1, 10),--字符串截取--
			"18:00:00"
		),
		'%Y-%m-%d %H:%i:%s'
	)
) 
THEN
	(
		CASE --内层case1
		WHEN UNIX_TIMESTAMP(
			STR_TO_DATE(
				substring(chuangjian_time, 1, 10),
				'%Y-%m-%d %H:%i:%s'
			)
		) + 124200 >= UNIX_TIMESTAMP(
			STR_TO_DATE(
				yuyue_opt_time,
				'%Y-%m-%d %H:%i:%s'
			)
		) THEN
			1
		ELSE
			0
		END
	)
ELSE
	(
		CASE--内层case2
		WHEN UNIX_TIMESTAMP(
			STR_TO_DATE(
				assign_time,
				'%Y-%m-%d %H:%i:%s'
			)
		) + 5400 >= UNIX_TIMESTAMP(
			STR_TO_DATE(
				yuyue_opt_time,
				'%Y-%m-%d %H:%i:%s'
			)
		) THEN
			1
		ELSE
			0
		END
	)
END
FROM
	qk_20030102
Logo

更多推荐