【问题标题】:Why does converting date to_char() throw ORA-01830 error when placed in a case-then?为什么将日期转换为_char() 放在案例中时会引发 ORA-01830 错误?
【发布时间】:2020-08-21 18:59:29
【问题描述】:

这段代码我用了很久了,效果很好:
to_char(v_emailRow.first_stamp, 'dd.mm.yyyy')

但是,今天我需要添加以下条件
case when v_cardCode = 'C1' then v_date else to_char(v_emailRow.first_stamp, 'dd.mm.yyyy') end

只要我添加了 case-then 语句,每当需要执行 to_char() 时,它就会开始总是抛出 ORA-01830: date format picture ends before converting entire input string 错误。如果我删除 case-then,它会像往常一样工作,如果我将它添加回来,错误会立即返回。

我已经尝试编写测试脚本,谷歌搜索,但我找不到问题。两种情况下都转换了相同的值,为什么其中一种有效而另一种抛出错误?

【问题讨论】:

  • 我们需要您的表的 DDL 以及一些示例数据才能复制错误。但要猜测这一点,我怀疑 v_date 可能是一个日期变量。因此,您的 CASE 将尝试返回 DATE 数据类型和 CHAR 数据类型的混合,这会导致问题。尝试在 v_date 上使用 TO_CHAR?
  • @Stilgar 你是对的,v_date 是一个日期变量。很可能是这个问题,没想到。提前致谢。

标签: sql oracle date datetime plsql


【解决方案1】:

当 v_cardCode = 'C1' 然后 v_date else to_char(v_emailRow.first_stamp, 'dd.mm.yyyy')

每当需要执行 to_char() 时,它开始总是抛出 ORA-01830: date format picture ends before conversion entire input string 错误

v_date,正如变量名所暗示的,它是一个DATE 数据类型,而应用TO_CHAR 会将日期转换为STRING。因此,有两种不同的数据类型会导致错误。

在您的 SQL 中尝试以下CASE

case 
  when v_cardCode = 'C1' 
  then to_char(v_date, 'dd.mm.yyyy')
  else to_char(v_emailRow.first_stamp, 'dd.mm.yyyy') 
end

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多