请问您是否知道如何在ms sql中实现下表:
时间间隔是每30分钟取决于作为参数给出的日期范围。
实施例。日期范围= 02/02/2015 - 2015年3月2日
答案 0 :(得分:3)
你可以创建一个数字表,然后用它来生成30分钟的间隔,以便添加到开始日期。
declare @fromDate datetime; set @fromDate = '2015-02-02'
declare @toDate datetime; set @toDate = '2015-02-03'
; with cteNumbers as (
select
row_number() over (order by o1.object_id, o2.object_id) - 1 as rn
from
sys.objects o1
cross join sys.objects o2
)
select
dateadd(minute, rn * 30, @fromDate) as DateTimeInterval
from
cteNumbers
where
dateadd(minute, rn * 30, @fromDate) between @fromDate and @toDate
order by
DateTimeInterval
答案 1 :(得分:2)
这将按照您的要求填充表格。 正如您所看到的,它只是填充一个表,其中包含变量中的日期,向变量添加30分钟,循环,检查它是否超过结束日期并重新开始或退出。
Declare @dateFrom date,
@dateTo date,
@currentDate datetime
Declare @Dates table (date varchar(30))
Set @dateFrom = '2015-01-01'
Set @dateTo = '2015-01-02'
Set @currentDate = Cast(@dateFrom as datetime) + '00:00:00'
While @currentDate < @dateTo
Begin
Insert into @Dates values (Convert(varchar, @currentDate, 120) + ' - ' + Convert(varchar, DATEADD(Mi, 30, @currentDate),108))
Set @currentDate = DATEADD(Mi, 30, @currentDate)
end
Select * from @Dates
答案 2 :(得分:0)
您可以使用以下公式将Datetime值向下舍入到每半小时:
cast(cast(cast(MyDateTimeValue as numeric(38,18)) * 48 as int) / 48.0 as datetime)
这种方式,例如,02/03/2015 01:37 AM成为02/03/2015 01:30 AM
答案 3 :(得分:0)
要创建所需的日期范围,您可以写为:
DECLARE @s DATEtime = '20150202', @e DATEtime = '20150203';
;WITH CTE AS
(
SELECT TOP ((DATEDIFF(HOUR , @s, @e)*2)+1)
ROW_NUMBER() OVER (ORDER BY number) AS rownum,
DATEADD(minute, (ROW_NUMBER() OVER (ORDER BY number) -1)*30, @s) AS dt
FROM [master].dbo.spt_values
WHERE [type] = N'P'
)
SELECT T1.dt AS StartRange,
T2.dt AS EndRange
FROM CTE AS T1
JOIN CTE AS T2 ON T1.rownum + 1 = T2.rownum