Sql 如何从开始日期开始以5分钟的间隔生成日期时间数据并填充该列?
生成以下输出,其中时间戳从开始日期开始,间隔为5分钟,将在结束日期结束,并且placeID需要是随机的(介于1到4之间),使用SQL server --建立数据库;数据库名称PARKINGDATA以便于更好地理解Sql 如何从开始日期开始以5分钟的间隔生成日期时间数据并填充该列?,sql,sql-server,Sql,Sql Server,生成以下输出,其中时间戳从开始日期开始,间隔为5分钟,将在结束日期结束,并且placeID需要是随机的(介于1到4之间),使用SQL server --建立数据库;数据库名称PARKINGDATA以便于更好地理解 Create database parkingdata; use parkingdata; CREATE Table marketplace ( MarketPlaceId nvarchar, DateTimeStamp datetime, ) --drop ta
Create database parkingdata;
use parkingdata;
CREATE Table marketplace
(
MarketPlaceId nvarchar,
DateTimeStamp datetime,
)
--drop table marketplace;
SELECT * from marketplace;
Declare @RandomMarketPlaceID int;
Declare @RandomDateTimeStamp datetime;
Declare @IdLowerLimitNumber int;
Declare @IdUpperLimitNumber int;
Set @IdLowerLimitNumber = 1
Set @IdUpperLimitNumber = 4
DECLARE @start DATETIME = '2015-01-01 00:00:00';
DECLARE @end DATETIME = '2015-03-05 00:00:00';
DECLARE @minuteInterval INT = 5;
DECLARE @countNum INT = DATEDIFF(MINUTE, @start, @end) / @minuteInterval + 1;
Declare @count int
Set @count = 1
While @count <= 20000
Begin
Select @RandomMarketPlaceID = Round(((@IdUpperLimitNumber - @IdLowerLimitNumber) * Rand()) +
@IdLowerLimitNumber, 0)
WITH N1 AS (SELECT N = 1 UNION ALL SELECT 1), -- 2
N2 AS (SELECT N = 1 FROM N1 CROSS JOIN N1 AS N), -- 4
N3 AS (SELECT N = 1 FROM N2 CROSS JOIN N2 AS N), -- 16
N4 AS (SELECT N = 1 FROM N3 CROSS JOIN N3 AS N), -- 256
N5 AS (SELECT N = 1 FROM N4 CROSS JOIN N4 AS N), -- 65536
Numbers AS (SELECT Number = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM N5)
SELECT @RandomDateTimeStamp= DATEADD(MINUTE, @minuteInterval * (Numbers.Number - 1), @start)
FROM Numbers
WHERE Numbers.Number <= @countNum;
Insert Into marketplace values (@RandomMarketPlaceID, @RandomDateTimeStamp)
Print @count
Set @count = @count + 1
End
Required OUTPUT Should be:
MarketPlaceID DateTimestamp
3 2015-01-01 00:00:00
2 2015-01-01 00:05:00
4 2015-01-01 00:10:00
1 2015-01-01 00:15:00
2 2015-01-01 00:20:00
.
.
.
.till the end date.
创建数据库parkingdata;
使用停车数据;
创建表格市场
(
MarketPlaceId nvarchar,
日期时间戳日期时间,
)
--升降台市场;
从市场中选择*;
声明@RandomMarketPlaceID int;
声明@randomDateTimestampDateTime;
声明@IdLowerLimitNumber int;
声明@IdUpperLimitNumber int;
设置@IdLowerLimitNumber=1
设置@IdUpperLimitNumber=4
声明@start DATETIME='2015-01-01 00:00:00';
声明@end DATETIME='2015-03-05 00:00:00';
声明@minuteInterval INT=5;
声明@countNum INT=DATEDIFF(分钟、@start、@end)/@minuteInterval+1;
声明@countint
设置@count=1
当@count时,我们真的需要表Number
,因为我们可以通过在循环中使用@countNum
来实现所需的结果吗?
请尝试以下操作:
While @count <= @countNum
Begin
Select @RandomMarketPlaceID = Round(((@IdUpperLimitNumber - @IdLowerLimitNumber) * Rand()) + @IdLowerLimitNumber, 0)
SELECT @RandomDateTimeStamp = DATEADD(MINUTE, @minuteInterval * @count, @start);
Insert Into marketplace values (@RandomMarketPlaceID, @RandomDateTimeStamp)
Set @count = @count + 1
End
While@count您使用的是MySQL还是MS SQL Server?我使用的是SQL Server。@AnirbanSom gr8,如果这有助于解决问题,您可以接受答案。