如何在SQL Query中生成日期?

时间:2013-12-19 17:16:17

标签: sql date insert dateadd

我想在2011年1月1日至2011年12月31日期间生成有关sql查询的日期值。

实施例 我的表A

Field A     Field B       Field C
   1       01/01/2011      125
   2       03/01/2011      100
   3       05/01/2011       50 

我想结果:

Field A     Field B       Field C
   1       01/01/2011      125
   0       02/01/2011        0
   2       03/01/2011      100
   0       04/01/2011        0
   3       05/01/2011       50 
   ...
   0       31/12/2011       0 

请给我建议并且非常感谢。

3 个答案:

答案 0 :(得分:1)

在SQL Server下,您可以创建一个表值函数,而不是创建一个临时表,因为这可以在查询之间重用:

-- List all of the dates between startdate and enddate (inclusive)
CREATE FUNCTION [dbo].[DatesBetween] (
    @startdate date,
    @enddate date
) RETURNS @ret TABLE (Date date) AS BEGIN

    DECLARE @dt date, @dtEnd date
    SELECT @dt = @startdate, @dtEnd = @enddate

    WHILE (@dt <= @dtEnd) BEGIN
        INSERT INTO @ret VALUES(@dt)
        SET @dt = DATEADD(day, 1, @dt)
    END 

    RETURN
END

这允许在一个查询中执行所有操作:

SELECT d.Date, COUNT(t.*) AS TotalOnDay
FROM dbo.DatesBetween('2011-01-01', '2011-12-31') d 
    LEFT JOIN MyTable t ON t.Date = d.Date
GROUP BY d.Date

答案 1 :(得分:0)

如果“字段B”格式化为日期,则可以使用DATEDIFF函数(Day,StartDate,EndDate) 您也可以将“DATEDIFF(日期)更改为年份,月份或您喜欢的任何其他部分。

希望这会有所帮助。

答案 2 :(得分:0)

在T-SQL中,您可以将查询编写为:

CREATE TABLE #ALLDATE(Date1 date)
DECLARE @startDate DATE='1/1/2011'
DECLARE @endDate DATE='12/31/2011'

insert into #ALLDATE
SELECT [Date] = DATEADD(Day,Number,@startDate) 
FROM  master..spt_values 
WHERE Type='P'
AND DATEADD(day,Number,@startDate) <= @endDate

select * from #ALLDATE