如何在 sql DB2 中使用条件其他字段和期间日期标记列?
Posted
技术标签:
【中文标题】如何在 sql DB2 中使用条件其他字段和期间日期标记列?【英文标题】:How to flag column with condition other field and period date in sql DB2? 【发布时间】:2019-08-29 04:48:03 【问题描述】:我有下表:
TABLE1
AREA_CODE|ITEM_CODE|EXP_DATE|STATUS
ABC|"16060715143928060544ii|2019-05-3|02
DEF|1606071514392806054JJ|2018-05-24|03
GHI|160607151439280605LL|2017-12-12|25
JKL|1606071545555928060MM|2018-07-20|02
我想获得这样的结果,即选择 TABLE1 上的所有字段和包含基于(EXP_DATE 属于时段 '2017-12-01' 直到 '2018-12-31')和(小于时段)的标志的新列将填充与 STATUS 列的初始值相同,如果不包括将填充 '25'。即
AREA_CODE|ITEM_CODE|EXP_DATE|STATUS|STATUS_OPR
ABC|16060715143928060544ii|2019-05-3|02|25
DEF|1606071514392806054JJ|2018-05-24|03|03
GHI|160607151439280605LL|2017-12-12|25|25
JKL|1606071545555928060MM|2018-07-20|02|02
如何使用 CASE WHEN 实现这一目标?我做了如下,但它不工作。
SELECT AREA_CODE, ITEM_CODE, EXP_DATE, STATUS,
CASE
WHEN EXP_DATE BETWEEN '2017-12-01' AND '2018-12-31' THEN '25'
ELSE STATUS
END AS STATUS_OPR
FROM TABLE1;
有人可以帮忙查询吗?之前谢谢你。
【问题讨论】:
这个查询有什么问题?错误?结果错误? 谢谢@tejash。查询可以运行,但结果不如预期。此结果 AREA_CODE|ITEM_CODE|EXP_DATE|STATUS|STATUS_OPR ABC|16060715143928060544ii|2019-05-3|02|02 DEF|1606071514392806054JJ|2018-05-24|03|- GHI|1606071|51439280605 JKL|1606071545555928060MM|2018-07-20|02|- 【参考方案1】:您需要转换日期,这样您的日期条件才会起作用。
SELECT AREA_CODE, ITEM_CODE, EXP_DATE, STATUS,
CASE
WHEN (EXP_DATE >=DATE('2017-12-01') AND EXP_DATE <= DATE('2018-12-31')) THEN '25'
ELSE STATUS
END AS STATUS_OPR
FROM TABLE1;
【讨论】:
'2018-12-31' 不使用DATE
函数被视为日期。
感谢@metal 的帮助。我试过了,但结果错误。 AREA_CODE|ITEM_CODE|EXP_DATE|STATUS|STATUS_OPR ABC|16060715143928060544ii|2019-05-3|02|02 DEF|1606071514392806054JJ|2018-05-24|03|- GHI|1606071514392801602|LL 1606071545555928060MM|2018-07-20|02|-【参考方案2】:
您的查询非常好,但我认为您的 EXP_DATE
列不是 date
数据类型。
在您的案例表达式中使用它时,您需要将其转换为日期(使用TO_DATE
函数)。
干杯!!
【讨论】:
有人对这个案子有其他想法吗? 这是一个非常简单的案例。您可以按照答案中的建议使用 to_date。您已在字符列中保存了日期数据类型,因此这是解决方案。【参考方案3】:感谢大家帮助我。
在我的逻辑错误之前,这个案子已经结束了。使用下面的 SQL:
SELECT AREA_CODE, ITEM_CODE, EXP_DATE, STATUS, CASE WHEN (STATUS <> '25') AND (EXP_DATE > '2018-12-31') THEN '25' ELSE STATUS END AS STATUS_OPR FROM TABLE1;
【讨论】:
以上是关于如何在 sql DB2 中使用条件其他字段和期间日期标记列?的主要内容,如果未能解决你的问题,请参考以下文章
DB2 和 SQL-如何在特定字段中返回最大值,以便每行只显示一条记录;从多个表中提取数据