【问题标题】:Default milliseconds to 0 in OracleOracle 中的默认毫秒数为 0
【发布时间】:2017-12-20 18:55:11
【问题描述】:

我在 Oracle 中有一个时间戳列,其格式为“MM/DD/YYYY HH24:MI.SxFF6”。 数据如下:

11/09/1917 10:45:28.230000
10/19/2014 18:09:28.410000
12/19/2011 11:06:28.340000

除了获取需要默认为 000000 的毫秒外,我需要时间戳来保留该值。 我试过查询 -

cast(to_char(Local_time, 'MM/DD/YYYY HH24:MI:SS') as timestamp(6))

但它抛出错误 - "Not valid month"

有人对我可以尝试将毫秒数设为 0 有什么想法吗?我使用 Toad 查询表。

【问题讨论】:

  • 你为什么要把TIMESTAMP 转换成VARCHAR2

标签: oracle timestamp milliseconds


【解决方案1】:

您的TIMESTAMP 值没有任何格式。您所拥有的只是默认的 显示 格式 - 由当前用户 NLS_TIMESTAMP_FORMAT 设置定义。

试试这个:

CAST(Local_time AS TIMESTAMP(0))

如果您想截断毫秒但仍然可用,请使用

CAST(CAST(Local_time AS TIMESTAMP(0)) AS TIMESTAMP(6))

【讨论】:

  • 我试过了。该列是时间戳数据类型,使用您的 cast(col as timestamp(0) 可以得到没有毫秒和 Am/PM 的时间戳。我希望它采用 24 HR 格式
  • 同样,它返回一个TIMESTAMP,它本身没有任何格式!将NLS_TIMESTAMP_FORMAT 设置更改为默认显示或使用TO_CHAR 函数。
【解决方案2】:

大概是这样的吧?

SQL> create table test (col timestamp, result timestamp);

Table created.

SQL> insert into test (col) values (to_timestamp('11/09/1917 15:45:28.230000', 'MM/DD/YYYY HH24:MI:SS.FF6'));

1 row created.

SQL> update test set result = cast(col as date);

1 row updated.

SQL> select * From test;

COL                       RESULT
------------------------- -------------------------
09.11.17 15:45:28,230000  09.11.17 15:45:28,000000

SQL>

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 2018-10-17
    • 1970-01-01
    • 2016-03-14
    • 2011-11-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多