-1

我正在尝试在旧代码使用 DDMM 格式 DATETIME 作为字符的记录中设置特定字段。我希望能够找到一个与某事相匹配的特定值并基本上更改该字段。超级简单的东西,对吧?

update MY_TABLE 
set SOME_DATETIME = to_char('0111', 'DDMM') 
where 
FIELDA = 'AA' 
and FIELDB = '2' 
and to_char(SOME_DATETIME, 'DDMM') = '0311' 
and FIELDC = 'ABC'

我知道一个事实,如果我在 where 子句中使用 to_char(SOME_DATETIME, 'DDMM') = '0311' 进行查询,它可以工作,但我似乎无法更改该字段。我收到以下错误:

** ERROR: DBD::Oracle::st execute failed: ORA-01481: invalid number format model 

我发现了很多例子,人们在查询中克服了这个错误消息,但在“集合”中却没有。

我是甲骨文的新手,所以希望得到一些帮助。

谢谢

4

2 回答 2

1

错误在这部分“设置 SOME_DATETIME = to_char('0111', 'DDMM')”。当您使用 to_char 函数并指定日期格式时,它需要一个日期。他现在得到了什么?一个字符串。将其转换为某个 Oracle 日期,然后重试。例如:

选择 to_char(to_date('2018-01-01','yyyy-mm-dd'), 'DDMM') from dual

于 2018-04-27T05:33:18.603 回答
1

似乎数据类型SOME_DATETIMEis DATE,因为查询适用于to_char(SOME_DATETIME, 'DDMM') = '0311'转换。然后正确使用以下内容:

update MY_TABLE 
   set SOME_DATETIME = to_date('0111', 'DDMM') 
 where FIELDA = 'AA' 
   and FIELDB = '2' 
   and to_char(SOME_DATETIME, 'DDMM') = '0311' 
   and FIELDC = 'ABC';

真正的转换应该由to_date而不是执行to_char

于 2018-04-27T05:40:45.650 回答