【问题标题】:oracle sql date format to only seconds [duplicate]oracle sql日期格式只有几秒钟[重复]
【发布时间】:2014-05-16 15:44:59
【问题描述】:

所以我试图将时间戳转换为秒。

我读到你可以这样做

to_char(to_date(10000,'sssss'),'hh24:mi:ss')

但事实证明,这样你不能超过 86399 秒。

这是我的日期格式:+000000000 00:00:00.000000

将其转换为秒的最佳方法是什么? (这是两个日期相减的结果)。

【问题讨论】:

  • 您从 timestamp2 中减去了 timestamp1 并想知道那是多少秒?
  • @DanBracuk 是的,没错。

标签: sql oracle


【解决方案1】:

您可以通过添加一个数字(在我们的例子中为零)将时间戳转换为日期。 oracle降级然后类型从timestamp到date

例如:

select systimestamp+0  as sysdate_ from dual

以及2个时间戳之间的秒差:

SQL> select 24*60*60*
       ((SYSTIMESTAMP+0)
        -(TO_TIMESTAMP('16-MAY-1414:10:10.123000','DD-MON-RRHH24:MI:SS.FF')+0)
        ) 
     diff_ss from dual;

   DIFF_SS
 ----------
   15140

【讨论】:

  • 虽然我喜欢这个解决方案,但我遇到了一个相当特殊的问题:ORA-00932:不一致的数据类型:预期 - 得到 INTERVAL DAY TO SECOND 00932. 00000 - “不一致的数据类型:预期的 %s 得到了 % s"
  • 执行cast(systimestamp as date) 等而不是添加任意零并依赖日期时间算术不是更清楚吗?
  • @Stupid.Fat.Cat:你能放弃你的代码吗?对我来说它工作得很好
  • @Alex Poole。你是对的,做一个演员(systimestamp as date)可能更清楚。但对我来说,最清楚的是一个简单的评论来解释你为什么这样做!对我来说,当我不得不阅读带有时间戳的列时,我经常这样做,因为它是人类可读的!所以 +0 比演员更容易写。
【解决方案2】:

您似乎正在尝试在interval 中查找总秒数(这是减去两个timestamps 时返回的数据类型)。为了将interval 转换为秒,您需要extract 每个组件并将它们转换为秒。这是一个例子:

SELECT interval_value,
         (EXTRACT (DAY FROM interval_value) * 24 * 60 * 60)
       + (EXTRACT (HOUR FROM interval_value) * 60 * 60)
       + (EXTRACT (MINUTE FROM interval_value) * 60)
       + EXTRACT (SECOND FROM interval_value)
          AS interval_in_sec
FROM   (SELECT SYSTIMESTAMP - TRUNC (SYSTIMESTAMP - 1) AS interval_value
        FROM   DUAL)

【讨论】:

  • SYSTIMESTAMP - 1 将您的时间戳转换为日期!
  • @eliatou:是的,但是从timestamp 中减去date 会得到interval,这就是练习的重点。
【解决方案3】:

如果您想要两个日期(或时间戳)之间的秒数,

select floor(
(to_date(to_char(timestamp1, 'yyyy-mm-dd HH24:MI:ss'),'yyyy-mm-dd HH24:MI:ss') 
- to_date(to_char(timestamp2, 'yyyy-mm-dd HH24:MI:ss'),'yyyy-mm-dd HH24:MI:ss')
 )    
* 24 -- hours per day
* 60 -- minutes per hour
* 60 -- seconds per minute
)
etc

【讨论】:

  • 这仅适用于date 类型,不适用于timestamp。减去两个timestamp 值得到一个interval,不能这么简单地对其进行操作。
  • 没错。答案已相应编辑。
  • 会不会更清楚 - 特别是对于必须维护代码的人 - 并且更简单地执行cast(timestamp1 as date) 等而不是转换为字符串或从字符串转换?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多