1

State来月のフィールドの値を選択する必要があります。フィールドMonthは char(6) です。例: 201310.

これは私が持っているもので、動作しません:

SELECT Code, Name, (SELECT State FROM dbo.ShiftList WHERE (MONTH(CONVERT(Date, Month)) = MONTH(GETDATE()) + 1)) AS SLNM FROM dbo.Shops

4

4 に答える 4

4

パフォーマンスの問題については、テーブル内のデータではなく、変数を使用して操作を実行することをお勧めします。この場合、クエリは次のようになります。

SELECT
  Code,
  Name,
  (SELECT State
   FROM dbo.ShiftList 
   WHERE MONTH = cast(year(dateadd(month, 1, getdate())) * 100
                + month(dateadd(month, 1, getdate())) as char(6))
) AS SLNM
FROM dbo.Shops

この構成により、インデックスの使用が可能になります。

于 2013-10-28T09:10:21.607 に答える
0

フィールド「月」の形式が「YYYYMM」に固定されている場合は、年と月を次のように取得できます。

select RIGHT([Month],2) AS MONTH ,LEFT([Month],4) AS YEAR
FROM dbo.ShiftList

必要な「状態」値を次のように取得します。

SELECT [State] 
 FROM dbo.ShiftList 
 WHERE  RIGHT([Month],2) = MONTH(DATEADD(month, 1, GETDATE())) 
 AND LEFT([Month],4) = YEAR(DATEADD(month, 1, GETDATE()))
于 2013-10-28T06:56:13.773 に答える
0

これを試して:

SELECT Code, Name, (SELECT State FROM dbo.ShiftList WHERE (MONTH(DATEADD(MONTH, Month / 100 * 12 - 22800 + Month % 100, -1))) = MONTH(GETDATE()) + 1)) AS SLNM FROM dbo.Shops

チェックはしていませんが。

于 2013-10-28T07:17:31.020 に答える