SELECT * FROM TABLE
WHERE YEAR(MDTFlgtStart)=YEAR(GETDATE()) AND MONTH(MDTFlgtStart)=MONTH(GETDATE())
上面的代码将当前年份和月份与列年份和月份进行比较。但是我们有没有机会给年=2012 月=3 或年=2011 月=5
SELECT * FROM TABLE
WHERE YEAR(MDTFlgtStart)=YEAR(GETDATE()) AND MONTH(MDTFlgtStart)=MONTH(GETDATE())
上面的代码将当前年份和月份与列年份和月份进行比较。但是我们有没有机会给年=2012 月=3 或年=2011 月=5
您可以只为这些值使用参数。作为奖励,如果列上存在索引,则避免针对列的函数将有助于查找(当然SELECT *
这意味着它可能最终会作为完整扫描,或范围扫描和一堆查找)......
-- these would be input parameters for your stored procedure
DECLARE @y INT = 2011, @m INT = 5;
-- now have a date variable:
DECLARE @dt DATE = DATEADD(MONTH, @m-1, DATEADD(YEAR, @y-1900, 0));
SELECT ... FROM dbo.tablename
WHERE MDTFlgtStart >= @dt
AND MDTFlgtStart < DATEADD(MONTH, 1, @dt);
此外,您应该停止邀请命名这些专栏的人共进午餐,因为我不得不假设他们不是很好。
您可以声明变量:
DECLARE @YEAR AS INT
DECLARE @MONTH AS INT
SET @YEAR = 2012
SET @MONTH = 3
SELECT *
FROM TABLE
WHERE YEAR(MDTFlgtStart)=@YEAR AND MONTH(MDTFlgtStart)=@MONTH
您可以将上述内容包装在一个可重用的过程中......