【问题标题】:Timestamp conversion in Oracle SQLOracle SQL 中的时间戳转换
【发布时间】:2015-02-22 15:04:28
【问题描述】:

我正在使用 Oracle SQL,但我遇到了日期问题。

我有一个很长的脚本,其中包含许多 Insert 命令,例如:

Insert into MyTable 
(TIME,CROSS,BID,ASK) 
values (to_timestamp('13-NOV-14 03.38.27.785000000 PM','DD-MON-RR HH.MI.SSXFF AM'),'USD/CHF',0.96294,0.963);

但是,我收到以下错误:

ORA-01843 -  "not a valid month"

这是 sysdate 格式:

22-FEB-15 04.57:18

我尝试了以下命令,但出现格式错误:

alter session set nls_date_format = 'DD-MON-RR HH.MI:SSXFF';

我该如何解决这个问题? 另外,我想将这些日期转换为以下格式:

DD/MM/YYYY HH24:MI:SS.miliseconds

这种转换可以在插入命令中吗?

请指教

【问题讨论】:

  • I built an SQLFiddle for your problem,在您的问题中运行 INSERT 语句,发现它运行良好。因此,这似乎是您系统本地的问题。鉴于错误,我猜测您的数据库可能正在使用月份名称不是英文月份名称的语言环境,但正如我所说,这只是一个猜测。祝你好运。

标签: sql oracle sql-timestamp


【解决方案1】:

它怀疑您的 locale_specific NLS_DATE_LANGUAGE 不同。

使用 to_timestamp 中包含的 NLS_DATE_LANGUAGE 参数尝试以下查询:

to_timestamp('13-NOV-14 03.38.27.785000000 PM','DD-MON-RR HH.MI.SSXFF AM','NLS_DATE_LANGUAGE = AMERICAN')

请参阅 this 了解另一种更改会话的方法。

【讨论】:

  • 谢谢,它正在工作。你能帮我解决第二个问题吗?我想更改日期的格式。我可以插入数据,但它的格式我不想使用。
  • Oracle 不会以您看到的格式存储日期。您应该担心仅显示它的格式。所以,不用担心,只需使用您拥有的插入语句。每当您想使用 SELECT 查询显示值时,您可以使用 TO_CHAR 以及所需的格式模型。如果对您有帮助,请将其标记为已回答。
  • 好的。谢谢。几周前,我用 "alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'" 更改了显示格式,但它现在不起作用。你知道为什么吗?
  • Alter session 仅设置该会话的参数设置,一旦断开/退出会话,alter session 对新会话没有影响。你可以使用,to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS','NLS_DATE_LANGUAGE='AMERICAN')
猜你喜欢
  • 2014-05-06
  • 2021-06-21
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 2017-06-10
  • 2021-08-28
  • 1970-01-01
  • 2015-10-07
相关资源
最近更新 更多