У меня есть временная таблица в моей базе данных с тарифами периода:Сформировать произвольную дату в течение некоторого периода
Rate | Period
-----+--------
3 | Week
1 | Month
2 | Month
1 | Week
3 | Year
1 | Monh
1 | Month
1 | Month
1 | Month
1 | Month
1 | Month
6 | Year
2 | Month
мне нужно генерировать случайные даты для 2014 года. Например, «6 Year» должно быть 6 случайных дат для 2014 года. 1 неделя должна быть случайной датой для каждой недели в 2014 году. Может кто-нибудь мне помочь?
Итак, это моя функция. Но даты не верны. Может быть, кто-нибудь может найти ошибку?
CREATE FUNCTION GenerateDate(@date_from date, @Rate int, @Period nvarchar(50))
RETURNS @LIST TABLE(item date)
BEGIN
DECLARE @i int, @j int, @d int
DECLARE @date date
IF (@Period LIKE 'Y%')
BEGIN
SET @i=0
WHILE (@i < @Rate)
BEGIN
SET @date = DATEADD (day, dbo.Amount(0,364), @date_from)
IF @date NOT IN (SELECT * FROM @LIST)
BEGIN
INSERT INTO @LIST VALUES (@date)
SET @[email protected]+1
END
END
END
IF (@Period LIKE 'M%')
BEGIN
SET @i=1
WHILE (@i <= 12)
BEGIN
SET @j=0
SET @d = CASE @i
WHEN 2 THEN 28
WHEN 4 THEN 30
WHEN 6 THEN 30
WHEN 9 THEN 30
WHEN 11 THEN 30
ELSE 31
END
WHILE (@j < @Rate)
BEGIN
SET @date = DATEADD (day, dbo.Amount(0,@d-1), @date_from)
IF @date NOT IN (SELECT * FROM @LIST)
BEGIN
INSERT INTO @LIST VALUES (@date)
SET @[email protected]+1
END
END
SET @date_from = DATEADD (month, 1, @date_from)
SET @[email protected]+1
END
END
IF (@Period LIKE 'W%')
BEGIN
SET @i = 1
WHILE (@i <= 52)
BEGIN
SET @j=0
WHILE (@j < @Rate)
BEGIN
SET @date = DATEADD (day, dbo.Amount(0,6), @date_from)
IF @date NOT IN (SELECT * FROM @LIST)
BEGIN
INSERT INTO @LIST VALUES (@date)
SET @[email protected]+1
END
END
SET @date_from = DATEADD (week, 1, @date_from)
SET @[email protected]+1
END
END
RETURN
END
CREATE FUNCTION Amount(@AmountMin float, @AmountMax float)
RETURNS float
AS
BEGIN
DECLARE @Amount float = (SELECT new_rand FROM RandomNumbers)*(@[email protected]) + @AmountMin
RETURN @Amount
END
GO
CREATE VIEW RandomNumbers
AS
SELECT cast(RAND(CHECKSUM(NEWID()))*1000 AS INT) AS new_rand
GO
вы ли попробовать что-нибудь самостоятельно? Если вы не знаете, как это сделать, я бы предложил нанять подрядчика, чтобы сделать это ... –
«1 неделя должна быть случайной датой для каждой недели в 2014 году» - может ли она быть 1-й датой каждой недели или она должна быть случайный? – Kartic
Картику, это должно быть случайным. –