2

当我使用 cx_Oracle 执行 SQL 查询并且结果是1900-01-01 00:00:00.000000返回的结果1900-01-01 00:00:00没有毫秒。

如果结果包含不全为零的毫秒,那么我会得到完整的时间戳,包括毫秒(即1900-01-01 00:00:00.123456)。

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SSXFF'在运行其他查询之前尝试过运行,但没有看到任何变化。

有任何想法吗?

4

2 回答 2

0

你和 Nagh 猜对了:这是一个 Python 的东西,但它只是一个显示的东西。您不会失去时间戳精度。

cx_Oracle Python 库将 Oracle 日期类型(Date、Timestamp..)转换为 Python 的日期类型之一datetime

当一个datetime对象被打印为一个字符串时,(即,它的__str__()方法被调用),它以 ISO 8601 格式打印出来,使用datetime.isoformat()- 这个方法是决定在它们为 0 时不打印毫秒的地方(实际上,adatetime有没有毫秒字段,它有微秒,但相同点)。

然而,这只是对象的字符串表示datetime。所有的时间信息仍然在那里供您使用。

如果你想一直显示毫秒你必须明确;尝试使用strftime()

from datetime import datetime

now = datetime.now()
print now
# >>> 2013-11-28 15:34:47.223000
now = now.replace(microsecond=0) # Remove milliseconds
print now
# >>> 2013-11-28 15:34:47
print now.strftime('%Y-%m-%d %H:%M:%S.%f')
# >>> 2013-11-28 15:34:47.000000
于 2013-11-28T23:37:58.327 回答
0

我想问题出在接收方,有人为你优化数字。

您可以尝试将此时间戳作为字符串并检查结果

SELECT 
  TO_CHAR(TO_TIMESTAMP('1900-01-01', 'YYYY-MM-DD'), 'YYYY-MM-DD HH24:MI:SSXFF')
FROM dual;
于 2013-11-01T00:43:56.357 回答