【问题标题】:Inserting date literals with time zone插入带有时区的日期文字
【发布时间】:2013-03-08 19:50:35
【问题描述】:

我想以我用alter session 命令设置的格式传递日期。这是我迄今为止尝试过的。不理解无效月​​份错误。我用的是 10g。

数据库时区为 UTC

SELECT dbtimezone FROM DUAL;
UTC 

我设置了会话时区和日期格式

alter session set time_zone = 'UTC';
alter session set NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF TZR';
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';

我在其中插入值的表格如下。

单条记录插入的SQL代码:

Insert into books_outsource_plan(os_cell_id, os_date, os_value, os_snapshot, os_created) 
values (1,'2013-03-08',3000,'2013-03-07 19:10:10 UTC','2013-03-08 19:15:54 UTC');

错误报告:

SQL Error: ORA-01843: not a valid month

【问题讨论】:

  • 尝试用我在类似问题中看到的 RRRR 替换 YYYY,但没有任何区别。
  • 尝试 CASTING 到 to_date 然后插入,试一试...
  • 如果我将to_timestamp_tz 添加到时间戳文字中,则插入成功。显然不需要弄乱日期文字。但是,当我查询表时,时间戳与我插入的文字不匹配。特别是,“2013-03-07 19:10:10 UTC”已转换为“07-MAR-13 02.10.10.0000000 PM”
  • 我看到显示的时间是我的当地时间,这很奇怪,因为我认为 NLS 设置会以 UTC 格式显示它。
  • 问题仅在于,这就是为什么您收到 SQL 错误:ORA-01843: not a valid month error...

标签: sql oracle


【解决方案1】:

尝试 CASTING 到 to_date,然后插入

喜欢

Insert into books_outsource_plan(os_cell_id, os_date, os_value, os_snapshot, os_created) 
values (1,to_date('2013-03-08'),3000,to_date('2013-03-07 19:10:10 UTC'),to_date('2013-03-08 19:15:54 UTC'));

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2013-06-16
    相关资源
    最近更新 更多