我有一个包含ID,Name和DateOfService列的表。我必须在我的查询中使用一个条件,它将从今年年初到6月动态提供数据,然后是从年初到7月的下个月,然后是八月.....我不能使用存储过程。
我无法确定用于动态获取数据的日期函数。我能够为6月或7月的月份进行硬编码......
我使用的SQL查询:
Select ID, Name, DateOfService from dbo.tableA
where Month(DateOfService) ='06' and Year(DateOfService)='2016'
任何人都可以帮忙。
答案 0 :(得分:1)
简单地将年份与MONTH进行比较当前月份:
SELECT *
FROM
@Table
WHERE
YEAR(DateColumn) = YEAR(GETDATE())
AND MONTH(DateColumn) < MONTH(GETDATE())
使用EOMONTH
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。