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

上記のコードでは、年と月の列で現在の年と月を比較しています。しかし、 year=2012 month =3 または year =2011 month=5 を指定できる可能性はありますか?

4

2 に答える 2

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 に答える
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 に答える