当前位置: 首页 > 面试题库 >

SQL Server,将持续时间行按24小时周期分割

齐成和
2023-03-14
问题内容

我正在使用sql server 2008 r2。我正在尝试在 FromDateTodate
之间按24小时周期范围划分行。例如,如果给定的时间行如下(( FromDateTodate 之间的范围是4天,那么我要4行)

ID   FromDate                 Todate     
---- ------------------------ -------------------------
1    2014-04-01 08:00:00.000  2014-04-04 12:00:00.000

我想要看到的结果是这样的:

ID   FromDate                 Todate                   DateDiff(HH)
---- ------------------------ -----------------------------------
1    2014-04-01 08:00:00.000  2014-04-01 23:59:59.000  15
1    2014-04-02 00:00:00.000  2014-04-02 23:59:59.000  23
1    2014-04-03 00:00:00.000  2014-04-03 23:59:59.000  23
1    2014-04-04 00:00:00.000  2014-04-04 12:00:00.000  12

问题答案:

试试这个查询:

WITH TAB1 (ID,FROMDATE,TODATE1,TODATE) AS
(SELECT ID,
FROMDATE,
DATEADD(SECOND, 24*60*60 - 1, CAST(CAST(FROMDATE AS DATE) AS DATETIME)) TODATE1,
TODATE 
FROM TABLE1
UNION ALL
SELECT 
ID,
DATEADD(HOUR, 24, CAST(CAST(TODATE1 AS DATE) AS DATETIME)) FROMDATE,
DATEADD(SECOND, 2*24*60*60-1, CAST(CAST(TODATE1 AS DATE) AS DATETIME)) TODATE1,
TODATE
FROM TAB1 WHERE CAST(TODATE1 AS DATE) < CAST(TODATE AS DATE)
),
TAB2 AS
(SELECT ID,FROMDATE,
CASE WHEN TODATE1 > TODATE THEN TODATE ELSE TODATE1 END AS TODATE
FROM TAB1)
SELECT TAB2.*,
DATEPART(hh, TODATE) - DATEPART(hh, FROMDATE) [DateDiff(HH)] FROM TAB2;


 类似资料:
  • 我想将任何持续时间/周期字符串文字(以下面示例中显示的格式)解析为Java中的周期/持续时间实例。 所谓持续时间/周期,我指的是包含基于日期和基于时间的数量的时间量。在Java中,仅适用于基于时间的量,如秒、分钟和小时,而,仅适用于日期量,如年、月和日。 要解析的字符串并不总是包含所有量。 例子: < li> < li> < li> < li> 如果可能的话,我会怎么做?

  • 问题内容: 我正在研究oracle db,但我不太擅长Oracle。我正在尝试按一个小时的时段划分一行。 例如,如果一个时间行给出如下, 开始时间(yyyy / mm / dd hh24:mi:ss)| 结束时间(yyyy / mm / dd hh24:mi:ss) 我想要看到的结果是这样的: 我已经被搜索过如何做,但是找不到。 但是我想可以通过使用“ CONNECT BY”来完成。 任何帮助都会

  • 我正在寻找一种从“ISO 8601持续时间格式”(P0DT0H0M0S)转换为小时的便捷方法。 到目前为止,我想到了这个: 如您所见,我的方法是将数字拆分并乘以24、1、1/60、1/3600以得到小时。我可以减少代码量吗? 样本数据和所需结果 输入: 'P1DT2H3M44S' (1 天 2 小时 3 分 44 秒) 期望输出: 26.062222222222222 (这是小时)

  • 问题内容: 我从服务器获得的时间就像 。 我想将其转换为。 我还希望转换后的时间为24小时格式。任何人都可以解决这个问题。我想得到的输出就像 问题答案: 试试这个:

  • 问题内容: 我有一个数据集: 我想基本上在一个小时内“拆分”这些时间间隔,例如: 到目前为止,这是我的代码(该想法的积分发给@DumitrescuBogdan,将通话数据分为15分钟间隔): 后半部分(在“全部合并”之后)不产生任何结果,前半部分产生以下结果: 谢谢,我是初学者。我了解第一部分;坦白地说,我不明白下半场 我愿意接受其他解决方案。 我正在使用MS-Access 2010 问题答案:

  • 我需要一些解释为什么这个代码不编译: 错误: 类型Duration中的(TemporalAmount)方法不适用于参数(ChronoUnit) 正如本文所述: public static Duration from(TemporalAmount amount)从时间量中获取持续时间的实例。这将根据指定的金额获得持续时间。TemporalAmount表示一个时间量,可以是基于日期的,也可以是基于时间