【问题标题】:Oracle Date Literal [DD-MON-RR HH.MI.SSXFF AM]Oracle 日期文字 [DD-MON-RR HH.MI.SSXFF AM]
【发布时间】:2012-06-07 03:11:44
【问题描述】:

我正在尝试使用时间戳格式 [DD-MON-RR HH.MI.SSXFF AM] 插入我的日期。

无论如何我都无法修改数据库设置,我必须通过 JAVA 的字符串格式插入日期(我也无法修改定义它的类)。

话虽如此,我需要逐个字符串地重构格式,而不需要调整其他类/db。

日期的 nls 设置是 DD-MON-RR。 12-JUN-2012 和 12/JUN/2012 工作得非常好。

但我发现很难重新创建日期的时间戳部分。

下面列出了我尝试过的几种格式。

'12-JAN-12' < success
'12/JAN/2012' < success
'12/JAN/2012 10.30.25.000 AM < failed
'12/JAN/2012 10:30:25.000 AM < failed

是否搞砸了 : 或 .?还是零对于毫秒来说还不够?几个小时以来一直在这个麻烦中。

提前致谢。

EDIT

经过几次推理后,学长们同意更改模型类。现在一切都很好。感谢您的帮助和建议。

【问题讨论】:

  • 数据库中字段的类型是什么?是DATE 还是TIMESTAMP
  • 它设置在DATE,但可用数据似乎在DD-MM-YYYY HH:Mi:ss AM(例如:1/4/2010 4:52:46 PM
  • oracle 中的日期也包含时间,但只有秒(没有毫秒)。您尝试的格式需要时间戳数据类型
  • 我已经尝试通过 SQL 12/JAN/2012 12:35:00 AM 插入它。也没有用。弹出此错误ORA-01830: date format picture ends before converting entire input string
  • 如果可以使用sql,为什么不使用to_date('12/01/2012 12:35:00', 'dd/mm/yyyy hh:mi:ss AM')?而不是依靠 NLS_DATE_FORMAT,顺便说一句,你能把它展示给我们吗

标签: java oracle date timestamp nls


【解决方案1】:

由于必须向 DB 发送字符串,因此必须依赖 oracle DB 到 DATE 类型的隐式转换。
由于您无法更改数据库设置,我唯一能建议的就是更改会话设置。
因此,如果您可以对数据库运行命令,请尝试:

Statement st = conn.createStatement();
st.execute("alter session set NLS_DATE_FORMAT='dd/mm/yyyy hh24:mi:ss'");    

(或其他格式(不建议在您的格式中使用mon,因为它可能也涉及NLS_TERRITORY))

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多