Oracle 转换为时间戳
我得到了一个列,其时间戳格式如下,当前存储为varchar2:Oracle 转换为时间戳,oracle,Oracle,我得到了一个列,其时间戳格式如下,当前存储为varchar2: 31DEC2019 13:20:51,847 我真的不认识这种格式,而且我很难编写一个捕获值的掩码。我尝试过使用它及其变体: 'DDMONYYYY HH:MIN:SSFF3' 但是没有运气。有什么想法吗?我的目标是将列从varchar2转换为timestamp,这应该是正确的格式: 'ddmonyyyyyyyy HH24:MI:SS,FF3' 我们有: DD:天 MONmonth YYYYyear HH24:24小时格式的小时
31DEC2019 13:20:51,847
我真的不认识这种格式,而且我很难编写一个捕获值的掩码。我尝试过使用它及其变体:
'DDMONYYYY HH:MIN:SSFF3'
但是没有运气。有什么想法吗?我的目标是将列从varchar2转换为timestamp,这应该是正确的格式:
'ddmonyyyyyyyy HH24:MI:SS,FF3'
我们有:
:天DD
monthMON
yearYYYY
:24小时格式的小时HH24
:分钟MI
:秒SS
:分隔符,
毫秒FF3
SQL> alter session set nls_language='English';
Session altered.
SQL> select to_timestamp('31DEC2019 13:20:51,847', 'DDMONYYYY HH24:MI:SS,FF3') as t from dual;
T
---------------------------------------------------------------------------
31-DEC-19 01.20.51.847000000 PM
1 row selected.
对于相同的数据,不同的会话语言可能会出现错误:
SQL> alter session set nls_language='Italian';
Modificata sessione.
SQL> select to_timestamp('31DEC2019 13:20:51,847', 'DDMONYYYY HH24:MI:SS,FF3') as t from dual;
select to_timestamp('31DEC2019 13:20:51,847', 'DDMONYYYY HH24:MI:SS,FF3') as t from dual
*
ERRORE alla riga 1:
ORA-01843: mese non valido
这是因为在示例中,“十二月”在意大利语中是“Dicembre”,所以月份部分应该是“DIC”,而不是“DEC”
无论会话语言如何,如果您知道数据以英语或任何其他语言存储,您可以在to_timestamp
调用中强制使用所需语言:
SQL> select to_timestamp('31DEC2019 13:20:51,847', 'DDMONYYYY HH24:MI:SS,FF3', 'NLS_DATE_LANGUAGE = English') as t from dual;
T
---------------------------------------------------------------------------
31-DIC-19 01.20.51.847000000 PM
1 riga selezionata.
这似乎更正确,谢谢!它给了我一个错误,虽然关于“不是一个有效的月份”使用该面具-即使所有的月份缩写是正确的。有什么想法吗?只是增加了一些细节。这就成功了!谢谢你,我从中学到了很多:)不客气!