oracle sql日期格式为仅秒

oracle sql日期格式为仅秒,sql,oracle,Sql,Oracle,所以我想把时间戳转换成秒 我读到你可以这样做 to_char(to_date(10000,'sssss'),'hh24:mi:ss') 但这样你就不能超过86399秒 这是我的日期格式:+000000000 00:00:00.000000 将此转换为秒的最佳方法是什么?(这是减去两个日期以找出差异的结果)。如果需要两个日期(或时间戳)之间的秒数 如果需要两个日期(或时间戳)之间的秒数 您可以通过添加一个数字(在本例中为零)将时间戳转换为日期。 Oracle然后将类型从时间戳降级到日期 例: 以

所以我想把时间戳转换成秒

我读到你可以这样做

to_char(to_date(10000,'sssss'),'hh24:mi:ss')
但这样你就不能超过86399秒

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


将此转换为秒的最佳方法是什么?(这是减去两个日期以找出差异的结果)。

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


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


您可以通过添加一个数字(在本例中为零)将时间戳转换为日期。 Oracle然后将类型从时间戳降级到日期

例:

以及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

您可以通过添加一个数字(在本例中为零)将时间戳转换为日期。 Oracle然后将类型从时间戳降级到日期

例:

以及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

看起来您正在尝试查找
间隔中的总秒数
(这是减去两个
时间戳时返回的数据类型
)。要将
间隔
转换为秒,需要
提取每个组件
并将其转换为秒。下面是一个例子:

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)

看起来您正在尝试查找
间隔中的总秒数
(这是减去两个
时间戳时返回的数据类型
)。要将
间隔
转换为秒,需要
提取每个组件
并将其转换为秒。下面是一个例子:

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)


您从timestamp2中减去timestamp1,想知道这是多少秒?@DanBracuk是的,没错。您从timestamp2中减去timestamp1,想知道这是多少秒?@DanBracuk是的,没错。这只适用于
date
类型,而不是
timestamp
。减去两个
时间戳
值会得到一个
间隔
,这不能简单地操作。这是正确的。答案被相应地编辑。这不是更清晰了吗?特别是对于那些必须维护代码的人来说,更简单的方法是执行
强制转换(timestamp 1 as date)
等等,而不是转换字符串?这只适用于
日期
类型,而不是
时间戳
。减去两个
时间戳
值会得到一个
间隔
,这不能简单地操作。这是正确的。答案被相应地编辑了。这不是更清晰了吗?特别是对于那些需要维护代码的人来说,更简单的方法是
cast(timestamp 1 as date)
等等,而不是转换字符串和字符串?SYSTIMESTAMP-1将时间戳转换为日期@eliatou:是的,但是从
时间戳
中减去
日期
会产生
间隔
,这就是练习的重点。SYSTIMESTAMP-1将时间戳转换为日期@eliatou:是的,但是从
时间戳
中减去
日期
会产生一个
间隔
,这就是练习的重点。虽然我喜欢这个解决方案,但我遇到了一个相当奇怪的问题:ORA-00932:不一致的数据类型:预期-获得间隔天到第二个00932。00000-“不一致的数据类型:预期%s得到%s”执行
cast(systimestamp as date)
等操作,而不是添加任意零并依赖日期-时间算法,这不是更清楚吗?@dumby.Fat.Cat:您能放弃您的代码吗?对我来说,它起作用了perfectly@Alex普尔。你说得对,做一个演员(日期为systimestamp)可能更清晰。但对我来说,最清楚的是一个简单的评论来解释你为什么这么做!对我来说,我经常这样做,当我必须阅读一些列的时间戳,只是因为它是人类可读的!所以+0比cast更容易编写。虽然我喜欢这个解决方案,但我遇到了一个相当奇怪的问题:ORA-00932:不一致的数据类型:预期-获得间隔天到第二个00932。00000-“不一致的数据类型:预期%s得到%s”执行
cast(systimestamp as date)
等操作,而不是添加任意零并依赖日期-时间算法,这不是更清楚吗?@dumby.Fat.Cat:您能放弃您的代码吗?对我来说,它起作用了perfectly@Alex普尔。你说得对,做一个演员(日期为systimestamp)可能更清晰。但对我来说,最清楚的是一个简单的评论来解释你为什么这么做!对我来说,我经常这样做,当我必须阅读一些列的时间戳,只是因为它是人类可读的!因此+0比强制转换更容易编写。