首页 > 解决方案 > 为什么将日期转换为_char() 放在案例中时会引发 ORA-01830 错误?

问题描述

我已经使用此代码很长时间了,它工作正常:
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,它会像往常一样工作,如果我将它添加回来,错误会立即返回。

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

标签: sqloracledatedatetimeplsql

解决方案


当 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整个输入字符串错误

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

CASE在您的 SQL 中尝试以下操作:

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

推荐阅读