股票市场样本的关键日期时间功能问题

时间:2014-08-20 12:50:08

标签: sql sql-server-2008

您好我正面临一个关键问题,请提出一些解决方案。

我的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),我们需要为所有人重复相同的事情。

请帮忙解决此案。提前致谢并等待您的回复

3 个答案:

答案 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