Oracle to_timestamp会产生错误

时间:2017-08-20 11:33:05

标签: oracle jdbc

我正在尝试使用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

1 个答案:

答案 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进行检索。