Case When: Using > Dates and < Dates with multiple conditions
Posted
技术标签:
【中文标题】Case When: Using > Dates and < Dates with multiple conditions【英文标题】:Case When: Using > Dates and < Dates With Multiple Conditions 【发布时间】:2019-10-29 15:28:17 【问题描述】:我有一个包含三层的 CASE WHEN 语句,每一层都定义了满足 A、B 或 C 特定类别的特定限制标准。A 和 B 严重依赖于 > 或
The criteria are as follows:
When Date is less than 01-OCT-2019 AND Limit is greater than 10,000 Then 'A'
When Date is greater than 01-OCT-2019 AND Limit is less than 90,000 And Plan = CP Then 'B'
When Date is greater than 01-OCT-2019 AND Limit is less than 60,000 And Plan = CO Then 'B'
ELSE 'C'
这已经写成
CASE
WHEN
TO_CHAR(DATE,'dd-mm-yyyy') < '01-10-2019'
AND Limit > 10000
THEN 'A'
WHEN
TO_CHAR(DATE,'dd-mm-yyyy') > '01-10-2019'
AND Limit < 90000
AND Plan = 'CP'
THEN 'B'
WHEN
TO_CHAR(DATE,'dd-mm-yyyy') > '01-10-2019'
AND Limit < 60000
AND Plan = 'CO'
THEN 'B'
ELSE 'C'
END AS Category
虽然查询运行,但根据日期条件分类的结果并不准确。例如:
对于 B 类,我应该只检索 2019 年 1 月 10 日 (dd-mm-yyyy) 之后的日期,但我得到的日期可以追溯到 2018 年。
+----+------------+---------+------+----------+---+
| ID | Date | Limit | Plan | Category | |
+----+------------+---------+------+----------+---+
| 1 | 20-11-2018 | 67000 | CP | B | X |
| 2 | 08-08-2019 | 32000 | CO | C | ✓ |
| 3 | 05-03-2019 | 12000 | CO | A | ✓ |
| 4 | 18-10-2019 | 70000 | CP | B | ✓ |
| 5 | 16-04-2019 | 52000 | CO | B | X |
| 6 | 23-07-2018 | 17000 | CP | A | ✓ |
+----+------------+---------+------+----------+---+
数据库显示日期结构为“01-OCT-2019”,但是,我希望输出显示为“01-10-2019”。在这种情况下,我包含了 To_Char 函数。
对于解决这个日期问题有什么建议吗?
【问题讨论】:
你试过用 to_date(DATE,'dd-mm-yyyy') > to_date( '01-10-2019', 'dd-mm-yyyy') 【参考方案1】:您需要简单地检查日期,而不是将它们转换为字符串,因为日期顺序与应用于表示日期的字符串的字典顺序不同。
您的代码可能是:
CASE
WHEN
DATE < date '2019-10-01'
AND Limit > 10000
THEN 'A'
WHEN
DATE > date '2019-10-01'
AND Limit < 90000
AND Plan = 'CP'
THEN 'B'
WHEN
DATE > date '2019-10-01'
AND Limit < 60000
AND Plan = 'CO'
THEN 'B'
ELSE 'C'
END AS Category
请注意,我保留了您的 DATE
专栏,即使它是一个保留字; date '2019-10-01'
部分是在 Oracle 中表示日期的 ANSI 方式。
在选择列表中,您可以使用to_char
获取格式化输出所需的方式。
【讨论】:
以上是关于Case When: Using > Dates and < Dates with multiple conditions的主要内容,如果未能解决你的问题,请参考以下文章