SELECT * FROM TABLE
WHERE YEAR(MDTFlgtStart)=YEAR(GETDATE()) AND MONTH(MDTFlgtStart)=MONTH(GETDATE())
上記のコードでは、年と月の列で現在の年と月を比較しています。しかし、 year=2012 month =3 または year =2011 month=5 を指定できる可能性はありますか?
SELECT * FROM TABLE
WHERE YEAR(MDTFlgtStart)=YEAR(GETDATE()) AND MONTH(MDTFlgtStart)=MONTH(GETDATE())
上記のコードでは、年と月の列で現在の年と月を比較しています。しかし、 year=2012 month =3 または year =2011 month=5 を指定できる可能性はありますか?
変数を宣言できます:
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
上記を再利用のための手順でラップすることができます....
これらの値にはパラメーターを使用できます。おまけとして、列に対する関数を回避すると、列にインデックスが存在する場合にシークを支援するのに役立ちます(もちろん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);
また、これらのコラムの名前を挙げた人をランチに招待するのもやめた方がいいでしょう。