动态引入数据的条件

时间:2016-11-01 20:55:41

标签: sql sql-server

我有一个包含ID,Name和DateOfService列的表。我必须在我的查询中使用一个条件,它将从今年年初到6月动态提供数据,然后是从年初到7月的下个月,然后是八月.....我不能使用存储过程。

我无法确定用于动态获取数据的日期函数。我能够为6月或7月的月份进行硬编码......

我使用的SQL查询:

Select ID, Name, DateOfService from dbo.tableA
where Month(DateOfService) ='06' and Year(DateOfService)='2016' 

任何人都可以帮忙。

2 个答案:

答案 0 :(得分:1)

简单地将年份与MONTH进行比较当前月份:

SELECT *
FROM
    @Table
WHERE
    YEAR(DateColumn) = YEAR(GETDATE())
    AND MONTH(DateColumn) < MONTH(GETDATE())

使用EOMONTH

的SQL-Server 2012
SELECT *
FROM
    @Table
WHERE
    YEAR(DateColumn) = YEAR(GETDATE())
    AND DateColumn <= EOMONTH(DATEADD(MONTH,-1,GETDATE()))

OR SQL-Server 2008

SELECT *
FROM
    @Table
WHERE
    YEAR(DateColumn) = YEAR(GETDATE())
    AND DateColumn <= DATEADD(DAY,- DAY(GETDATE()),CAST(GETDATE() AS DATE))

生成一些测试数据:

DECLARE @Table AS TABLE (Id INT IDENTITY(1,1),Value INT, DateColumn DATE)
DECLARE @D DATE = '2015/12/01'
WHILE @D <= GETDATE()
BEGIN
    INSERT INTO @Table (Value,DateColumn)
    VALUES (DAY(@D)%8,@D)
    SET @D = DATEADD(DAY,1,@D)
END

答案 1 :(得分:0)

您可以使用DATEPART函数来解析DATETIME值的各个元素。例如,如果@MyValue='01/02/03 04:05:06:07 PM',那么DATEPART(SECOND,@MyDateValue)将返回6。