Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从开始日期开始以5分钟的间隔生成日期时间数据并填充该列?_Sql_Sql Server - Fatal编程技术网

Sql 如何从开始日期开始以5分钟的间隔生成日期时间数据并填充该列?

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

生成以下输出,其中时间戳从开始日期开始,间隔为5分钟,将在结束日期结束,并且placeID需要是随机的(介于1到4之间),使用SQL server

--建立数据库;数据库名称PARKINGDATA以便于更好地理解

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,如果这有助于解决问题,您可以接受答案。