从时间戳中删除毫秒

时间:2016-08-08 12:55:04

标签: plsql

我需要在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'))来自双重;但是时间部分被删除了。

3 个答案:

答案 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')