您好我正面临一个关键问题,请提出一些解决方案。
我的Sql表中有一条记录,如下所示:
Table Name (tbl_rawdata)
ID Price DATE
1 20 20/8/2014
2 20 20/8/2013
因此,我们没有创建样本数据和测试所需的实际数据。
例如:我们需要插入60条记录,如表中所示,但日期会有所不同。
ID Price DATE
1 20 20/8/2014
1 20 21/8/2014
1 20 22/8/2014
-----------------------
1 20 25/8/2014
------------------------
1 20 26/8/2014
1 20 27/8/2014
1 20 28/8/2014
这意味着我们需要获得下一个日期(不包括星期六和星期日),就像我们需要插入60天一样。
以同样的方式,我们在tbl_rawdata中有不同的id值(大约100),我们需要为所有人重复相同的事情。
请帮忙解决此案。提前致谢并等待您的回复
答案 0 :(得分:1)
如果不需要,您可以从结果中删除dayName:
DECLARE @FirstDate DATETIME
-- You can change @year to any year you desire
SELECT @FirstDate = '20140820'
-- Creating Query to Prepare Year Data
;WITH cte AS (
SELECT 1 AS ID,
@FirstDate AS FromDate,
DATENAME(dw, @FirstDate) AS Dayname
UNION ALL
SELECT CASE WHEN DayName NOT IN ('Saturday','Sunday') THEN cte.ID + 1
ELSE cte.ID END AS ID,
DATEADD(d, 1 ,cte.FromDate),
DATENAME(dw, DATEADD(d, 1 ,cte.FromDate)) AS Dayname
FROM cte
WHERE ID < 60
)
SELECT ID, 20 AS Price, FromDate AS Date, Dayname
FROM CTE
WHERE DayName NOT IN ('Saturday','Sunday')
答案 1 :(得分:1)
试试这个
select id, price,dateadd(day,number,date) from tbl_rawdata as t1,
master..spt_values as t2
where type='p' and number<60 and datename(weekday,dateadd(day,number,date)) not in
('saturday','sunday')
答案 2 :(得分:0)
尝试这样的事情。
DECLARE @Table1 AS TABLE (ID int, Price int, [Date] smalldatetime)
DECLARE @Table2 AS TABLE (ID int, Price int, [Date] smalldatetime)
INSERT INTO @Table1(ID, Price, [Date])
SELECT 1, 20, '2014-08-20 00:00:00.000' UNION SELECT 2, 20, '2013-08-20 00:00:00.000'
DECLARE @DateRange int = 0
WHILE @DateRange < 60
BEGIN
INSERT INTO @Table2
SELECT ID, Price, [Date] + @DateRange
FROM @Table1
SET @DateRange = @DateRange+1
END
DELETE @Table2 WHERE DATEPART(DW,[Date]) in (7,1)
SELECT *
FROM @Table2