我正在尝试使用jdbc驱动程序获取时间戳列的值。以下查询的作用类似于魅力:
to_char(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') update_date
但是,我需要时间戳值而不是to_char,如果我在select statemnt中使用以下查询,则会给出
OTA-01821-日期格式无法识别
错误。请有人帮忙吗?
to_timestamp(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') update_date
答案 0 :(得分:2)
错误的直接原因是格式掩码的TZR部分,它对于普通时间戳不是有效的。您可以转换为带时区的时间戳 with a different function:
In [2]: import pandas as pd
In [3]: df1 = pd.DataFrame({'A': [1,2,3], 'index1':[1,2,3], 'index2':[4,5,6]})
In [4]: df2 = pd.DataFrame({'A': [4,5,6], 'index1':[2,3,4], 'index2':[7,6,5]})
In [5]: df1
Out[5]:
A index1 index2
0 1 1 4
1 2 2 5
2 3 3 6
In [6]: df2
Out[6]:
A index1 index2
0 4 2 7
1 5 3 6
2 6 4 5
In [7]: df1['index1'].isin(df2['index1'])
Out[7]:
0 False
1 True
2 True
Name: index1, dtype: bool
In [8]: df1['index2'].isin(df2['index2'])
Out[8]:
0 False
1 True
2 True
Name: index2, dtype: bool
In [9]: df1[['index1','index2']].isin(df2[['index1', 'index2']])
Out[9]:
index1 index2
0 False False
1 False False
2 False False
或省略时区:
to_timestamp_tz(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR')
但由于to_timestamp(update_date,'YYYY-MM-DD HH24:MI:SS.FF9')
已经是一个时间戳(带有[local]时区),所以在将该字符串显式转换回时间戳之前,您使用your session's NLS_TIMESTAMP_TZ_FORMAT
setting将其隐式转换为字符串(使用或没有时区)。
充其量这是毫无意义的,但如果你的NLS设置与你使用的显式格式不匹配,那么它会产生不同的错误或不正确的结果。
如果您想从Java获取时间戳值,则不要进行任何转换 - 只需选择原始uodate_date
列,然后使用JDBC update_date
进行检索。