-1
SELECT * FROM TABLE 
 WHERE  YEAR(MDTFlgtStart)=YEAR(GETDATE()) AND MONTH(MDTFlgtStart)=MONTH(GETDATE())

上面的代码将当前年份和月份与列年份和月份进行比较。但是我们有没有机会给年=2012 月=3 或年=2011 月=5

4

2 回答 2

1

您可以只为这些值使用参数。作为奖励,如果列上存在索引,则避免针对列的函数将有助于查找(当然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);

此外,您应该停止邀请命名这些专栏的人共进午餐,因为我不得不假设他们不是很好。

于 2013-09-11T20:39:48.673 回答
1

您可以声明变量:

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

您可以将上述内容包装在一个可重用的过程中......

于 2013-09-11T20:35:50.220 回答