【问题标题】:Inserting values with specific date and time format in Oracle在 Oracle 中插入具有特定日期和时间格式的值
【发布时间】:2013-09-17 12:21:25
【问题描述】:

我尝试将值插入到 SURVEY.YSG 表中(在插入查询中使用)

INSERT INTO SURVEY.YSG(YSG_ID,YSG_MSN_DTM,TAX_ID,TAX_NM,TYPE_CD,USER_ID,
                       FRST_NM,LAST_NM,SHL_TXT,NPR_DT, PHONE_NBR,FAX_NBR,
                       EMAIL_ADRS_TXT,YSG_IMD,MDFD_ID,YSG_VRFCTN_CD,
                       YSG_VRFCTN_DTM,LOG_KEY,PLS_DTM,LOAD_KEY,UPDTD_LOAD_KEY ) 
   VALUES ( '103','2011-08-11 13:34:36.000000','656002075',
           'STG HEALTH SYSTEM','null','OPLINKS4','UNK','UNK','UNK',
           '12/31/8888','UNK','UNK','UNK','X','UNK','Y','8888-12-31 00:00:00.000000',
           0,'2011-07-20 12:00:00.000000',0,0)

错误报告: SQL 错误:ORA-01843:不是有效月份 01843. 00000 - “不是一个有效的月份” *原因:
*行动:

以下是SURVEY.YSG 表中使用日期和时间戳创建的 4 列。

YSG_MSN_DTM - TIMESTAMP(6)

NPR_DT - DATE

YSG_VRFCTN_DTM - TIMESTAMP(6)

PLS_DTM - TIMESTAMP(6)

TO_DATE()函数试过:

TO_DATE('2011-08-11 13:34:36','YYYY-MM-DD HH24:MI:SS')  

得到如下输出:11-AUG-11 01.34.36.000000000 PM.

预期输出:

列:YSG_MSN_DTM -> 2011-08-11 13:34:36.000000 以及另一列中的NPR_DT ->12/31/8888 列。

有没有其他方法可以在 Oracle 中实现这一点?

感谢您的任何帮助。

谢谢

【问题讨论】:

  • DATETIMESTAMP 列没有任何内在格式。当您显示它们时,您提供了一种格式 - 如果您不提供任何格式,则当前会话的 NLS 设置用于提供默认格式。
  • 同意。谢谢!

标签: oracle11g oracle10g


【解决方案1】:

试试这个:

INSERT INTO
      SURVEY.YSG ( YSG_ID,
                YSG_MSN_DTM,
                TAX_ID,
                TAX_NM,
                TYPE_CD,
                USER_ID,
                FRST_NM,
                LAST_NM,
                SHL_TXT,
                NPR_DT,
                PHONE_NBR,
                FAX_NBR,
                EMAIL_ADRS_TXT,
                YSG_IMD,
                MDFD_ID,
                YSG_VRFCTN_CD,
                YSG_VRFCTN_DTM,
                LOG_KEY,
                PLS_DTM,
                LOAD_KEY,
                UPDTD_LOAD_KEY )
VALUES
      ( '103',
        TO_TIMESTAMP ( '2011-08-11 13:34:36.000000',
                    'YYYY-MM-DD HH24:MI:SS.FF' ),
        '656002075',
        'STG HEALTH SYSTEM',
        'null',
        'OPLINKS4',
        'UNK',
        'UNK',
        'UNK',
        TO_DATE ( '12/31/8888',
                'MM/DD/YYYY' ),
        'UNK',
        'UNK',
        'UNK',
        'X',
        'UNK',
        'Y',
        TO_TIMESTAMP ( '8888-12-31 00:00:00.000000',
                    'YYYY-MM-DD HH24:MI:SS.FF' ),
        0,
        TO_TIMESTAMP ( '2011-07-20 12:00:00.000000',
                    'YYYY-MM-DD HH24:MI:SS.FF' ),
        0,
        0 );

【讨论】:

  • 感谢您的帮助!我也尝试使用此选项,输出:TIMESTAMP 字段 11-AUG-11 01.34.36.000000000 PM 和 DATE 字段 31-DEC-88。我希望插入与 TERADATA DB 中完全相同的类型。它正在从 Teradata 迁移到 Oracle 环境。
  • 尝试更改会话以获取日期值。例如 ALTER SESSION SET NLS_DATE_FORMAT='YYYY.MM.DD HH24:MI:SS';
  • 我同时使用了 NLS_TIMESTAMP_FORMAT 和 NLS_DATE_FORMAT 来达到同样的效果。感谢您的帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多