[英]Labelling Columns by Intervals in mysql
嗨,我有点卡在这里。 我正在尝试为名为“绿色”,“黄色”和“红色”的合同创建3个标签。 标签由公式contractdate-curdate()标识。 -如果距离超过90天,则显示绿色。 -黄色-如果结束日期在31至89天之间-如果结束日期为30天或更短则为红色
我需要一种方法来为Label创建一个列,然后将每个合约设置为各自的颜色,或者为每种颜色创建一个带有标识符的3列?
这些是我提出的几个问题,但是没有运气。
select
contractname, contractenddate
from
contract
where
contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 30 DAY)
and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 60 DAY)
and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 90 DAY)
和
select contractname, date_sub(contractenddate,interval 0-30 day)as Red,
date_sub(contractenddate,interval 31-89 day)as Yellow,
date_sub(contractenddate,interval 90 day)as Green
from contract
我知道这些是不正确的,但也许有人可以帮助建立这些? 这将不胜感激!!! 最后一点是我无法更改数据库结构,只能使用select语句。
提前感谢吨!
像这样的工作? 研究使用DATEDIFF
和CASE
:
SELECT contractname,
contractenddate,
CASE
WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'Red'
WHEN DATEDIFF(CurDate(),contractenddate) < 90 THEN 'Yellow'
ELSE 'Green'
END Label
FROM Contract
这是SQL Fiddle 。
并且,如果您希望离开的天数,可以将以下内容添加到您的SQL语句中:
DATEDIFF(CurDate(),contractenddate) DaysAway
另外,如果您需要红色,黄色和绿色作为列,那么非常相似的方法将起作用:
SELECT contractname,
contractenddate,
CASE WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'X' ELSE '' END 'Red',
CASE WHEN DATEDIFF(CurDate(),contractenddate) < 90 AND DATEDIFF(CurDate(),contractenddate) > 30 THEN 'X' ELSE '' END 'Yellow',
CASE WHEN DATEDIFF(CurDate(),contractenddate) >= 90 THEN 'X' ELSE '' END 'Green'
FROM Contract
我在其中标记了一个“ X”。 不清楚您要寻找什么。
摆弄得更多。
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.