【发布时间】: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')
标签: sql oracle case-when date-conversion