cx_Oracle和SQL Developer在CURRENT_DATE不一致

凯斯·佩伦(Kes Perron)

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从不同的地方获取?

亚历克斯·普尔

从文档中

CURRENT_DATE以数据类型的公历日历中的值返回会话时区中的当前日期DATE

会话时区是重要的部分您的SQL Developer和Python会话似乎处于不同的时区。您可以检查他们有什么

select sessiontimezone from dual

另一个问题是,您正在执行to_date(CURRENT_DATE),这会使用会话的NLS_DATE_FORMAT隐式地将日期转换为字符串,然后将其显式转换回日期,这也可能有所不同。有时候,这可能会达到您想要的目的,但是当您在代码中使用预期之外的设置运行代码时,有一天可能会中断。这可能包括在0020年而不是2020年结束,或者保留您不想的时间。

大概您正在尝试删除(或更确切地说,为零)时间部分,但是如果这是意图,那么您应该这样做trunc(CURRENT_DATE)当然,您仍然需要正确的会话时区-即匹配您要与之比较的数据。(并根据数据类型以及如何填充你可能真正想要SYSDATE,而不是CURRENT_DATE;阅读的差异。)

截断视图列可能会影响性能,因为它可能会阻止使用该列(基础表的索引,取决于视图正在执行的操作)上的索引,因此-再次假设正确的时区-您可能会更好在做:

WHERE acq_date_time >= trunc(CURRENT_DATE)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用cx_Oracle批量插入:数据类型不一致

来自分类Dev

数据不一致的日期格式Oracle SQL

来自分类Dev

size_t和sizeof不一致

来自分类Dev

镜头和状态,库不一致

来自分类Dev

和的映射彼此不一致?

来自分类Dev

gcc和clang之间的C ++不一致

来自分类Dev

序列和seqiplot之间不一致

来自分类Dev

BigDecimal和MathContext的行为不一致

来自分类Dev

空格和边距不一致

来自分类Dev

sscanf和fprintf不一致?

来自分类Dev

int和bool之间的不一致

来自分类Dev

CommonsMultipartResolver和HandlerExceptionResolver工作不一致

来自分类Dev

OLEObject高度和宽度不一致

来自分类Dev

和运营商的不一致

来自分类Dev

更改内部”和(,行为不一致

来自分类Dev

Rectangle和FancyBboxPatch之间的行为不一致

来自分类Dev

gcc和clang之间的C ++不一致

来自分类Dev

sscanf和fprintf不一致?

来自分类Dev

ntpd和ntpdate之间不一致

来自分类Dev

xinput的设备和属性标签不一致

来自分类Dev

Vim:CW和DW空格不一致

来自分类Dev

与`ls -al`和`getfacl`的输出不一致

来自分类Dev

ROL 和 OF 的不一致行为

来自分类Dev

SQL Server HASHBYTES转换不一致?

来自分类Dev

SQL Server 清理不一致的日期

来自分类Dev

Cx_Oracle和Pyinstaller

来自分类Dev

SQL错误:ORA-00932:数据类型不一致:预期的DATE得到了数字00932。00000-“数据类型不一致:预期的%s得到了%s”

来自分类Dev

使用SQL Server查找基于端点和不一致数据的序列跨度

来自分类Dev

为什么Date.prototype.toString()和Date.prototype.toLocaleString()返回表示不一致时间点的字符串?