【问题标题】:Extracting Day From a Calculated Date Field in Oracle SQL从 Oracle SQL 中的计算日期字段中提取日期
【发布时间】:2019-03-05 17:42:38
【问题描述】:

我正在尝试从计算字段(案例语句)中提取日期,但我一直遇到问题。任何建议表示赞赏。

SELECT 
EXTRACT(DAY FROM (
CASE
 WHEN TYP IN ('Swap')
 THEN LEAST(TRD_DT, VAL_DT)
 ELSE LEAST(EFF_DT, VAL_DT)))
END AS ISS_DT
FROM HA

【问题讨论】:

  • 什么问题?在什么日期值?请提供更多详细信息!
  • EFF_DTTRD_DTVAL_DT 是什么?它们是数据库表中的列吗?每一个的数据类型是什么?
  • 一个明显的错误是括号。 VAL_DT 后面有三个括号;其中两个应该在关键字END 之后,这是CASE 表达式语法的一部分,位于下一行。
  • 另外,如果你只从CASE 表达式的结果中提取DAY,为什么要给它命名ISS_DT(大概是“发布日期”)?结果将是天数,例如 12 或 23; ISS_DT 似乎不是这样一个数字的自然名称。

标签: sql oracle date case calculated-columns


【解决方案1】:

除了修复明显的括号不匹配外,还可以通过几种方式简化查询。完整的CASE 表达式不需要放在括号中(尽管使用它们可能对某些读者有所帮助)。在任何情况下,由于LEAST 的第二个参数在两种情况下都是相同的,因此可以进一步简化计算。我会像这样编写代码 sn-p:

select extract(day from
          least(case when typ in ('Swap') then trd_dt else eff_dt end, val_dt)
       ) as iss_day
from   ha

我使用ISS_DAY 作为列名而不是ISS_DT,因为你所拥有的实际上只是一个天数,而不是一个日期。

【讨论】:

  • 知道了。谢谢大家的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
相关资源
最近更新 更多