【发布时间】:2020-12-13 07:52:13
【问题描述】:
SQL Developer 中的以下查询返回 1 条记录:
SELECT * FROM myview WHERE to_date(acq_date_time) = to_date(CURRENT_DATE)
但是,当我使用 cx_Oracle 在 Python 中执行相同的查询时,我没有得到任何记录:
query = "SELECT * FROM myview WHERE to_date(acq_date_time) = to_date(CURRENT_DATE)"
cursor.execute(query)
results = cursor.fetchall()
更令人费解的是,当我使用这个查询时,我得到了 5 个结果(我期望今天的结果加上前一天的所有结果):
query = "SELECT * FROM myview WHERE to_date(acq_date_time) > to_date(CURRENT_DATE - 1)"
cursor.execute(query)
results = cursor.fetchall()
我已经验证了SQL Developer和cx_Oracle中的连接地址是一样的。我没有收到任何错误。任何想法为什么会发生这种情况? SQL Developer 和 cx_Oracle 是否从不同的地方获取CURRENT_DATE?
【问题讨论】:
-
这可能是日期格式的问题。使用日期格式模型,尝试使用带有格式字符串的 TO_DATE 函数。见这里docs.oracle.com/cd/B19306_01/server.102/b14200/…
-
你为什么要使用
to_date()来处理已经是约会的东西?这是多余的,并且会导致您使用不同的 NLS 设置出现问题,从而导致错误或错误的结果。目前尚不清楚这是否是问题(或部分问题); SQL Developer 和 Python 会话更有可能从不同的语言环境开始,current_dateuses the session timezone。select sessiontimezone from dual在两者中都显示了什么?我想一个是-04:00,另一个是不同的东西,也许是UTC?
标签: python-3.x oracle cx-oracle