当我使用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'
,但没有看到任何更改。
有什么想法吗?
答案 0 :(得分:0)
我猜问题是在接收方,有人为你优化数字。
您可以尝试将此时间戳作为字符串并检查结果
SELECT
TO_CHAR(TO_TIMESTAMP('1900-01-01', 'YYYY-MM-DD'), 'YYYY-MM-DD HH24:MI:SSXFF')
FROM dual;
答案 1 :(得分:0)
你和Nagh怀疑是正确的:这是一个Python的东西,但它只是一个展示的东西。你没有失去时间戳精度。
cx_Oracle Python库将Oracle日期类型(Date,Timestamp ..)转换为Python的日期类型之一datetime。
当一个datetime
对象以字符串形式打印出来时(即调用其__str__()
方法),它使用datetime.isoformat()
打印出ISO 8601格式 - 此方法为当它们为0时决定不打印毫秒(实际上,datetime
没有毫秒字段,而是具有微秒,但是相同点。)
但是,这只是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