我希望得到一些帮助,以帮助我编写一些自己编写的SQL语句。
我有一张数据表:
ID StartDate EndDate
1 01/01/2000 04:30 PM 01/03/2000 06:15 AM
2000/01/04 08:10 AM 01/04/2000 07:25 AM
3 01/05/2000 11:00 AM 01/06/2000 03:45 AM
我需要获得以下信息:
ID StartDate EndDate
1/01/01/2000 04:30 PM 01/01/2000 11:59 PM
1 01/02/2000 12:00 AM 01/02/2000 11:59 PM
1 01/03/2000 12:00 AM 01/03/2000 06:15 AM
2000/01/04 08:10 AM 01/04/2000 07:25 AM
3 01/05/2000 11:00 AM 01/05/2000 11:59 PM
3 01/06/2000 12:00 AM 01/06/2000 03:45 AM
换句话说,按日期划分日期范围。在SQL中甚至可能吗?
我的数据库是Oracle 11G R2,由于某些情况,我担心不能使用PL / SQL。
可以在SQL中执行此操作。有两个技巧。首先是生成一系列数字,您可以使用进行CTE处理connect
。
第二个是将正确的逻辑放在一起以扩展日期,同时保留正确的开始和结束时间。
以下是一个示例:
with n as (
select level n
from dual connect by level <= 20
),
t as (
select 1 as id, to_date('01/01/2000 4', 'mm/dd/yyyy hh') as StartDate, to_date('01/03/2000 6', 'mm/dd/yyyy hh') as EndDate from dual union all
select 2 as id, to_date('01/04/2000 8', 'mm/dd/yyyy hh') as StartDate, to_date('01/04/2000 12', 'mm/dd/yyyy hh') as EndDate from dual union all
select 3 as id, to_date('01/05/2000', 'mm/dd/yyyy') as StartDate, to_date('01/06/2000', 'mm/dd/yyyy') as EndDate from dual
)
select t.id,
(case when n = 1 then StartDate
else trunc(StartDate + n - 1)
end) as StartDate,
(case when trunc(StartDate + n - 1) = trunc(enddate)
then enddate
else trunc(StartDate + n)
end)
from t join
n
on StartDate + n - 1 <= EndDate
order by id, StartDate
在这里它是SQLFiddle。
感谢所有人!
我想按组计算tab$date[i1]和tab$date[I]之间的时差(以小时为单位)。这里是我的代码: 问题是我同时获得了小时、分钟和秒: 日期是POSIXct数据。我怎样才能只获得小时数?
问题内容: 我正在使用MySQL,并且具有下表: 我希望能够生成这样的报告,其中在过去4周内完成了各个周期: 或最近3个月内: 有什么想法可以进行选择查询以生成等效的日期范围和点击次数吗? 问题答案:
问题内容: 我有一列希望按日期时间分组而不创建新列。这可能是我当前的代码不起作用吗? 问题答案: 正如@JosephCottam所建议的 过时的用途 您可以将索引设置为并使用
本文向大家介绍coldfusion 日期或时间范围,包括了coldfusion 日期或时间范围的使用技巧和注意事项,需要的朋友参考一下 示例 日期或时间范围的示例。
问题内容: 我需要填充一个表,该表将存储2个给定日期之间的日期范围:09/01/11-10/10/11 因此,在这种情况下,该表将从2011年9月1日开始存储,直到每天存储到10/10/11,我想知道在SQL Server中是否有一种巧妙的方法-我目前正在使用SQL Server 2008 。 谢谢 问题答案: 在SQL 2005+上很容易;如果您有数字表或理货表,操作会更容易。我在下面伪造了它: