如何从Oracle中的Timestamp中删除毫秒?

时间:2017-10-25 08:01:56

标签: sql oracle timestamp

我想以.csv格式从'My_Customer'表中导出数据 我正在提取时间字段,但我得到输出以及毫秒 例如:
我得到的输出,
25-10-2017 12:53:12:00076
我想删除/截断毫秒。

预期输出 -
25-10-2017 12:53:12

我尝试了to_char(),但它没有提供正确的输出。 (而不是在该字段中提供确切的时间,它是rounding off)。

2 个答案:

答案 0 :(得分:1)

将时间戳转换为字符串:

SQL> SELECT TO_CHAR (SYSTIMESTAMP, 'YYYY-MON-DD HH24:MI:SS') AS my_date
  FROM DUAL;

MY_DATE
-----------------------------
2017-OCT-13 00:38:26

答案 1 :(得分:0)

您可以将其投射到没有小数秒的时间戳(这将舍入到最接近的秒数):

CAST( your_timestamp AS TIMESTAMP(0) )

DATE数据类型(这将截断到最接近的秒数):

CAST( your_timestamp AS DATE )

或者您可以将其转换为格式化字符串并指定要使用的格式模型(这将截断到最接近的秒):

TO_CHAR( your_timestamp, 'YYYY-MM-DD HH24:MI:SS' )

像这样:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE your_table ( your_timestamp ) AS
  SELECT TIMESTAMP '2017-10-25 12:53:12.10076' FROM DUAL;

查询1

SELECT CAST( your_timestamp AS TIMESTAMP(0) ) AS "Timestamp",
       CAST( your_timestamp AS DATE ) AS "Date",
       TO_CHAR( your_timestamp, 'DD-MM-YYYY HH24:MI:SS' ) AS "String"
FROM   your_table

<强> Results

|             Timestamp |                 Date |              String |
|-----------------------|----------------------|---------------------|
| 2017-10-25 12:53:12.0 | 2017-10-25T12:53:12Z | 25-10-2017 12:53:12 |

TIMESTAMPDATE的格式设置取决于您的NLS_TIMESTAMP_FORMATNLS_DATE_FORMAT会话参数,但您可以直接控制TO_CHAR的格式指定格式模型。