将Varchar转换为日期

时间:2013-09-22 11:49:17

标签: sql oracle

我一直坚持使用我在插入触发器

之后使用的更新查询

查询如下:

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 
                             );

我正在尝试使用select语句

的值更新列CARR.DATE_SUBMITTED
SELECT M.ACKNOWLEDGMENTHEADER.MESSAGEDATE MESSAGEDATE 
  FROM MESSAGES M 
 where M.ACKNOWLEDGMENTHEADER.MESSAGESENDERIDENTIFIER='PMDA'"

select语句的输出采用Varchar格式,如20130918224413 结果列CARR.DATE_SUBMITTED是DATE字段,如9/18/2013 12:31:00 PM

请帮助我

3 个答案:

答案 0 :(得分:1)

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

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

To_Date(M.ACKNOWLEDGMENTHEADER.MESSAGEDATE,'YYYYMMDDHH24MISS')

答案 1 :(得分: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是可以互换的。

答案 2 :(得分: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

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