如何在 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 &lt;&gt; '25') AND (EXP_DATE &gt; '2018-12-31') THEN '25' ELSE STATUS END AS STATUS_OPR FROM TABLE1;

【讨论】:

以上是关于如何在 sql DB2 中使用条件其他字段和期间日期标记列?的主要内容,如果未能解决你的问题,请参考以下文章

DB2如何进行update操作?

在SQL中,如何查询某一字段中最大值的数据

DB2 和 SQL-如何在特定字段中返回最大值,以便每行只显示一条记录;从多个表中提取数据

如何将 varchar(2020 年 1 月 1 日)中的日期转换为 DB2 sql 中的日期类型?

如何在DB2数据库中运行模式文件

更新错误后的 DB2 触发器