如何将iso-8601类型的日期插入到oracle数据库中

 可可1994棒_241 发布于 2023-02-08 13:58

我正在使用Oracle 11g并试图找出如何将此日期插入到我的表中.日期似乎是ISO-8601,但是7个零让我感到困惑.

Insert into myTestTable (myDate) values ('2013-01-22T00:00:00.0000000-05:00');

我试图格式化日期没有运气.我得到的错误是ORA-01861文字与格式字符串不匹配.

1 个回答
  • 首先,列必须是一个TIMESTAMP WITH TIME ZONE类型来保存您尝试插入的值.Oracle DATE仅精确到秒,并且不包含时区.

    七个零是小数秒.a的默认精度TIMESTAMP WITH TIME ZONE恰好是七位小数.要为秒指定三个小数位,请将列定义为TIMESTAMP(3) WITH LOCAL TIME ZONE.

    返回的实际小数位数SYSTIMESTAMP(即服务器上的当前时间戳)取决于操作系统.我的本地Windows 7 Oracle返回三个有效小数位,而我的一个客户端的Solaris OS返回六位有效小数位.

    至于插入值,如果你做这样的事情......

    insert into myTestTable (myTS) values ('2013-01-22T00:00:00.0000000-05:00');
    

    ... Oracle将尝试使用其当前NLS_TIMESTAMP_TZ_FORMAT设置转换时间戳.您可以像这样查询设置:

    SELECT *
    FROM NLS_Session_Parameters
    WHERE Parameter = 'NLS_TIMESTAMP_TZ_FORMAT';
    
    PARAMETER               VALUE
    ----------------------- ----------------------------
    NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
    

    我得到的结果是"出厂默认值".你的可能是相同的,你可以看到它与你给出的格式不匹配,因此转换失败.

    正如另一个答案正确指出的那样,您可以使用TO_TIMESTAMP_TZ函数和格式字符串将字符串转换为时间戳.您还可以使用ANSI时间戳文字:

    insert into myTestTable (myTS)
      values (TIMESTAMP '2013-01-22T00:00:00.0000000-05:00');
    

    Oracle 在此处记录了时间戳文字.该链接涵盖了所有类型的文字,因此您需要在屏幕上滚动约三分之二(或执行查找)以获取时间戳文字.

    2023-02-08 14:00 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有