我需要在PL SQL中将时间戳转换为日期。 我得到输入' 2016-08-01T09:16:47.000'来自webservice,我需要' 8/01/2016 9:16:47 AM'。 我将输入视为VARCHAR2 。
它可以是" AM"或" PM" 。
我尝试使用选择TRUNC(to_timestamp(' 2016-08-01T09:16:47.000',' YYYY-MM-DD" T" HH24:MI:SS .ff3'))来自双重;但是时间部分被删除了。
答案 0 :(得分:1)
myview
编辑:这适用于上午或下午
myview.userInteractionEnabled = YES;
答案 1 :(得分:1)
您的查询:
select TRUNC(to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3'))
from dual;
返回date
值。然后,如何显示这是一个用于将其转换为字符串的格式掩码的问题。如果没有格式掩码,将使用默认的NLS设置,例如我明白了:
SQL> select TRUNC(to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3'))
from dual;
TRUNC(TO_
---------
01-AUG-16
因为我的NLS_DATE_FORMAT设置目前是DD-MON-RR'。使用显式格式掩码:
1 select TO_CHAR( TRUNC(to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3')
2 'YYYY-MM-DD HH:MI:SS AM')
3* from dual;
TO_CHAR(TRUNC(TO_TIMES
----------------------
2016-08-01 12:00:00 AM
这表明使用trunc
是错误的,因为它完全消除了时间。所以:
1 select TO_CHAR( to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3'),
2 'YYYY-MM-DD HH:MI:SS AM')
3* from dual;
TO_CHAR(TO_TIMESTAMP('
----------------------
2016-08-01 09:16:47 AM
注意这也适用于PM时间:
1 select TO_CHAR( to_timestamp('2016-08-01T13:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3'),
2 'YYYY-MM-DD HH:MI:SS AM')
3* from dual;
TO_CHAR(TO_TIMESTAMP('
----------------------
2016-08-01 01:16:47 PM
答案 2 :(得分:0)
您应该使用to_char而不是trunc。
在您的示例中,正确的操作是 - to_char('08/01/2016 09:16:47.000000000 AM','dd:mm:yyyy hh:mi:ss am')