Ildar Asked:2022-04-17 20:27:57 +0000 UTC2022-04-17 20:27:57 +0000 UTC 2022-04-17 20:27:57 +0000 UTC 如何从没有分隔符的字符串中获取日期? 772 有一个这种格式的字符串20140102125832。 DATE从这个字符串中获取类型的最惯用的好方法是什么? 输入:20140102125832 结论:2014-01-02 12:58:32 sql 2 个回答 Voted Best Answer 0xdb 2022-04-17T23:56:50Z2022-04-17T23:56:50Z with str (val) as ( select '20140102125832' from dual), dt (val) as ( select cast (str.val as date, 'yyyymmddhh24miss') from str) select to_char (dt.val, 'yyyy-mm-dd hh24:mi:ss') str, dump (dt.val, 16) dump from dt / STR DUMP ------------------- -------------------------------- 2014-01-02 12:58:32 Typ=13 Len=8: de,7,1,2,c,3a,20,0 不应该忘记,date作为选择结果的类型的列可以在客户端隐式转换回字符形式,根据会话参数,可以找到如下: select * from nls_session_parameters where parameter='NLS_DATE_FORMAT' / PARAMETER VALUE ------------------------------ -------------------------------- NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS 为避免隐式转换,在选择中,使用函数to_char显式转换回符号形式。 Ildar 2022-04-17T20:49:44Z2022-04-17T20:49:44Z 客户端上的日期格式不同,所以选择时显示的日期没有时间,您可以永久更改客户端上的格式或一个会话 select to_date('20140102125832', 'YYYY-MM-DD HH24:MI:SS') as dt from dual; 结果:2014-01-02 12:58:32 格式更改为一个会话: alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
不应该忘记,
date作为选择结果的类型的列可以在客户端隐式转换回字符形式,根据会话参数,可以找到如下:为避免隐式转换,在选择中,使用函数
to_char显式转换回符号形式。客户端上的日期格式不同,所以选择时显示的日期没有时间,您可以永久更改客户端上的格式或一个会话
结果:
2014-01-02 12:58:32格式更改为一个会话: