我需要执行一个涉及以下几种情况的sql命令...
我首先需要按列到期时间(纪元字符串)进行排序,该字段大于现在或为空(未到期)。
因此,过期记录(过期时间少于现在的记录)将始终位于未过期记录之后。
然后在每种情况下,都需要进行按字母顺序的辅助搜索。
tTABLE ID 名称 到期 活跃
到目前为止我的尝试:
select * from `tTABLE` WHERE `active`='1'
ORDER BY
CASE WHEN `expiry` > 1571410101 THEN 1
CASE WHEN `expiry` = '' THEN 2 ELSE 3 END,`expiry`
DESC
答案 0 :(得分:1)
我想你想要
SELECT t.*
FROM `tTABLE` t
WHERE active = 1
ORDER BY (CASE WHEN expiry > unixtime()
THEN 1 -- explicit future expires first
WHEN expiry IS NULL
THEN 2 -- no expires second
ELSE 3
END),
name;
答案 1 :(得分:0)
我不确定这在MySql中如何工作,但是在 Oracle 中,以下SQL可以工作:
SELECT *,
CASE WHEN expiry > 1571410101 THEN 1
WHEN expiry = '' THEN 2
ELSE 3
END exp
FROM tTABLE
WHERE active = '1'
ORDER BY exp DESC
我认为同样适用于MySql。