如何从 Oracle 的时间戳中删除毫秒?

Tha*_*han 3 sql oracle timestamp

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

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

我已经尝试过to_char(),但它没有给出正确的输出。(它不是给出该字段中可用的确切时间,而是rounding off)。

MT0*_*MT0 7

您可以将其转换为不带小数秒的时间戳(这将四舍五入到最接近的秒):

CAST( your_timestamp AS TIMESTAMP(0) )
Run Code Online (Sandbox Code Playgroud)

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

CAST( your_timestamp AS DATE )
Run Code Online (Sandbox Code Playgroud)

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

TO_CHAR( your_timestamp, 'YYYY-MM-DD HH24:MI:SS' )
Run Code Online (Sandbox Code Playgroud)

像这样:

SQL小提琴

Oracle 11g R2 架构设置

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

查询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
Run Code Online (Sandbox Code Playgroud)

结果

|             Timestamp |                 Date |              String |
|-----------------------|----------------------|---------------------|
| 2017-10-25 12:53:12.0 | 2017-10-25T12:53:12Z | 25-10-2017 12:53:12 |
Run Code Online (Sandbox Code Playgroud)

TIMESTAMP和的格式化方式DATE取决于您NLS_TIMESTAMP_FORMAT和会话参数,但您可以在指定格式模型时NLS_DATE_FORMAT直接控制格式化。TO_CHAR