【问题标题】:SQL Date Calculation formattingSQL 日期计算格式
【发布时间】:2014-11-29 14:49:14
【问题描述】:

自从我发布以来已经有一段时间了。我对日期计算有疑问。

我试图找出两个日期之间的差异,例如开始时间和结束时间。

我已经能够找到天数的差异,例如,如果我有日期:

start = 12/11/2014 12:05:05
finish = 13/11/2014 09:44:19

然后查询给我-0.90224537......

但是,出于工资目的,我需要小时、分钟、秒形式的答案。这样做的最佳方法是什么?

到目前为止我的查询是:

select
    time_sheet.time_sheet_id, 
    time_sheet.start_date_time - time_sheet.finish_date_time,     
    employee_case.case, employee_case.employee 
from 
    time_sheet 
inner join 
    employee_case on time_sheet.employee_case = employee_case.employee_case_id 
where 
    employee_case.case = 1;

附:我正在使用 Oracle 数据库:)

【问题讨论】:

  • 感谢您编辑它以正确阅读@marc_s

标签: sql oracle date


【解决方案1】:

date - date 产生 days 的差异。因此,您可以使用标准时间转换将其转换为小时、分钟和秒,如下所示:

select
    time_sheet.time_sheet_id, 
    (time_sheet.finish_date_time - time_sheet.start_date_time)||' days'||(time_sheet.finish_date_time - time_sheet.start_date_time)*24||' hours '||(time_sheet.finish_date_time - time_sheet.start_date_time)*24*60||' minutes '||(time_sheet.finish_date_time - time_sheet.start_date_time)*24*60*60||' seconds ' ,     
    employee_case.case, employee_case.employee 
from 
    time_sheet 
inner join 
    employee_case on time_sheet.employee_case = employee_case.employee_case_id 
where 
    employee_case.case = 1;

此外,您需要 finish_date_time 作为被减数,start_date_time 作为减数以避免负值。

【讨论】:

  • 这并不完全符合我的要求。我的问题可能不清楚。我想要它,以便给定所提供的日期,答案将是 21h 39m 14s 而你给出的是它给我不同单位的持续时间,而不是在小时分钟和秒之间划分。很抱歉有任何混淆
  • 达拉戈,我明白了。我确信某处存在一些函数(可能不是 Oracle 默认值),它显示了一个很好的可读格式,从“0,9”转换为“21h 39m 14s”(或任何实际值)。这并不容易,因为您可能不想看到这个“0days 0h 39m 14s”?这比“39m 14s”(假设不到 1 小时)更容易。
  • @tvCa 你是完全正确的。有一个:select numtodsinterval(2.7,'Day') from dual;
【解决方案2】:

感谢 toddlermenot 的帮助,但我决定采用我找到的另一种方式。对于其他有同样问题的人,我做了以下事情:

select
    time_sheet.time_sheet_id, 
    to_number( to_char(to_date('1','J') +
    (time_sheet.finish_date_time - time_sheet.start_date_time), 'J') - 1)  days,
    to_char(to_date('00:00:00','HH24:MI:SS') +
    (time_sheet.finish_date_time - time_sheet.start_date_time), 'HH24:MI:SS') time,
    employee_case.case, employee_case.employee 
from 
    time_sheet 
inner join 
    employee_case on time_sheet.employee_case = employee_case.employee_case_id 
where 
    employee_case.case = 1;

这似乎正是我需要的。它会将连续字段中的天数转换为小时分钟和秒,但出于我的目的,这是可以接受的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多