0

我一直被我在插入后触发器中使用的更新查询所困扰

查询如下:

UPDATE ARGUS_APP.CMN_REG_REPORTS CARR 
   SET CARR.DATE_SUBMITTED = (
                               SELECT M.ACKNOWLEDGMENTHEADER.MESSAGEDATE MESSAGEDATE 
                                 FROM MESSAGES M 
                                where M.ACKNOWLEDGMENTHEADER.MESSAGESENDERIDENTIFIER='PMDA'
                              )
 WHERE CARR.ESM_REPORT_ID IN (
                               select report_id 
                                 from esm_owner.safetyreport sr,
                                      esm_owner.MESSAGES M 
                                where m.msg_id  = sr.msg_id 
                             );

我正在尝试CARR.DATE_SUBMITTED使用 select 语句的值更新列

SELECT M.ACKNOWLEDGMENTHEADER.MESSAGEDATE MESSAGEDATE 
  FROM MESSAGES M 
 where M.ACKNOWLEDGMENTHEADER.MESSAGESENDERIDENTIFIER='PMDA'"

选择语句的输出是这样的 Varchar 格式20130918224413 ,结果列CARR.DATE_SUBMITTED是这样的 DATE 字段 9/18/2013 12:31:00 PM

请帮助我

4

3 回答 3

1

DATE 列没有自己的格式,它们通过工具或使用 to_char 函数中的特定格式转换为人类可读的格式。

要将 varchar2 转换为日期,请使用正确格式的 TO_DATE()。在您的情况下,它可能是:

To_Date(M.ACKNOWLEDGMENTHEADER.MESSAGEDATE,'YYYYMMDDHH24MISS')
于 2013-09-22T12:02:36.780 回答
0

为了将字符串文字转换为date数据类型的值,您需要使用to_date()函数:

to_date(varchar2_col_name, 'yyyymmddhh24miss')

注意:Oracle 不会以任何特定格式存储日期 - 您可以使用to_char()以下函数以您喜欢的任何格式显示它们:

to_char(date_column, 'mm/dd/yyyy hh:mi:ss PM') 

注:经络指标PMAM可互换。

于 2013-09-22T12:03:37.100 回答
0

正如其他人已经说过的那样,您应该使用 TO_DATE 函数。我还可以看到您已经修复了您的选择,但是对于使用 TO_DATE() 的其他人来说,了解格式掩码很重要,如果使用不正确,它可能会产生不需要的结果。可以避免简单的错误,例如使用 12 小时制、将分钟与月份混淆等。

我建议使用允许的掩码参数提供一张表

http://www.techonthenet.com/oracle/functions/to_date.php

我知道你问过 Date 但 oracle 也有一个 TO_TIMESTAMP 函数来将字符串转换为时间戳。参数少

http://www.techonthenet.com/oracle/functions/to_timestamp.php

日期和时间戳的不同之处在于时间戳具有小数秒并且它们的算术不同。减去/添加两个时间戳将给出一个间隔,而两个日期给出另一个日期。

于 2013-09-22T15:52:12.813 回答