【问题标题】:removing milliseconds from a oracle tmstmp field从 oracle tmstmp 字段中删除毫秒
【发布时间】:2014-12-26 15:43:04
【问题描述】:

我在 Oracle 中有一个 TIMESTAMP(6) 字段,我需要从时间中删除毫秒部分。

例如我有

10/20/2014 10:34:06.356000 AM

我想删除毫秒以便我有

10/20/2014 10:34:06 AM

你知道最好的方法吗?

谢谢!

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    这个怎么样?

    select cast(col as timestamp(0))
    

    编辑:

    避免四舍五入的最简单方法是使用trunc() 或减去半秒:

    select cast(col - 0.5/(24*60*60) as timestamp(0))
    

    【讨论】:

    • 这可行,但它会四舍五入。有没有办法让它不四舍五入,只删除毫秒而不四舍五入?
    【解决方案2】:

    试试这个

    SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW"
    FROM DUAL;
    

    如果您需要 12 小时日期格式

    SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH:MI:SS AM') "NOW"
    FROM DUAL;
    

    SQL FIDDLE

    【讨论】:

    • 这行得通,但我需要该文件是时间戳(0)。当我运行您的代码时,我会丢失 AM/PM 并且时间会丢失其 GMT 格式。它可以转换为时间戳(0)吗?那么它可能会起作用
    • 如果您需要上午/下午的 12 小时格式,请使用第二个查询
    • 但这仍然是一个 CHAR。我需要它时间戳(0)。这可能吗?
    【解决方案3】:

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

    CAST( your_timestamp AS TIMESTAMP(0) )
    

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

    CAST( your_timestamp AS DATE )
    

    如果您希望它为 TIMESTAMP(0) 数据类型,则将其转换回:

    CAST( CAST( your_timestamp AS DATE ) AS TIMESTAMP(0) )
    

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

    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 的格式。

    【讨论】:

      【解决方案4】:

      这可能会有所帮助!

      select substr(to_char('10/20/2014 10:34:06.356000 AM'),1,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1)||' '||
      substr(to_char('10/20/2014 10:34:06.356000 AM'),-2,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1) "Date"
      from dual;
      

      【讨论】:

        猜你喜欢
        • 2015-01-03
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        • 2018-04-06
        • 2015-10-21
        • 2021-08-26
        • 1970-01-01
        相关资源
        最近更新 更多