【问题标题】:cx_Oracle.DatabaseError: ORA-01858: date time false formatcx_Oracle.DatabaseError: ORA-01858: 日期时间错误格式
【发布时间】:2017-09-01 12:59:48
【问题描述】:

我试图弄清楚我在解析日期/时间参数时收到的错误消息,例如:

'29-SEP-1999 14:00:00'

相对于:

'29-SEP-1999'

前者不插入表格,后者插入。我怀疑 NLS 设置存在问题,但设置并不清楚允许使用什么格式的日期/时间,因此我需要在我的 python 代码中重新格式化日期/时间。我在 SQL Developer 上对 NLS 的当前设置是:

Date format: DD.MM.RR HH24:MI:SSXFF

这是我的代码:

sql_insert = 'insert into sms_temtplate_test (date_sms, result_sms, msgid, msgparts) values (:1, :2, :3, :4)'
smsreport_text_new = ('29-SEP-1989 14:00:00', 'success', '2D67A865FBHFA25A9261C75E8D2F0F2B ', 1)

cursor.execute(sql_insert, smsreport_text_new)
connection.commit()
cursor.close()
connection.close()

【问题讨论】:

  • SQL Developer 上的 NLS 设置不会起任何作用,您能否在插入日期的位置发布实际代码。
  • 原帖修改,见上
  • 代替'29-SEP-1989 14:00:00'试试TO_DATE('29-SEP-1989 14:00:00','dd-mon-yyyy hh24:mi:ss')
  • 在我的脚本中,我将其修改为:smsreport_text_new = ('''TO_DATE('29-SEP-1959 14:00:00','dd-mon-yyyy hh24:mi:ss') ''', 'success', '2D557A865FBHFA25A9261C75E8D2F0F2B ', 1),还是不行
  • 您收到的确切错误信息是什么。

标签: python sql oracle oracle-sqldeveloper cx-oracle


【解决方案1】:

你应该使用这个:

to_date('29-sep-1999 14:00:00', 'dd-mon-yyyy hh24:mi:ss')

如果你真的想在不指定格式的情况下插入字符串,你可以发出以下命令:

alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'

您还可以将该字符串转换为 Python 中的 datetime.datetime 实例,然后简单地将其绑定到您的 SQL 语句。

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2015-04-06
    • 2020-07-20
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多