0

私は SQL クエリをさらに掘り下げようとしています。

Yearmo      Back_1_month
-------     ------------
 201202      201201            Where 201202 is Feb 2012 , 201201 is Jan 2012
 201201      201112            
 201204      201203            
 201212      201211

どうすれば 201201 に間に合うかわかりません。

4

5 に答える 5

2

yearmoそれが であると仮定するとint:

DECLARE @Yearmo INT
SET @Yearmo = 201201

-- First, convert yearmo to a varchar.
-- Next, add a "day" portion to the varchar.
-- Then, convert to a date.
-- Then, subtract a month.
-- Finally, convert back to your original format using char(6).
SELECT CONVERT(
    CHAR(6), 
    (DATEADD(MONTH, -1, CAST(CAST(@YearMo AS VARCHAR) + '01' AS DATETIME))), 
    112
)
于 2012-11-08T17:12:14.163 に答える
1

これは 1 つの sql クエリで機能します。

SELECT CONVERT(VARCHAR(6), DATEADD(month, -1 , convert(datetime, CAST ( 201201 AS VARCHAR(8)) + '01', 112) ) , 112) 
于 2012-11-08T17:15:38.090 に答える
1

月を減算するには、次のようにDATEADDを使用できます

SELECT DATEADD(month, -1, yearmo)

ただし、日付をフォーマットする必要があり、そうyearmoでない場合は日時としてキャストする必要がある場合があります。

于 2012-11-08T17:07:43.317 に答える
1

これを試して:

SELECT yearmo, 
LEFT(CONVERT(CHAR(8), DATEADD(month, -1, CONVERT(datetime, yearmo + '01')), 112), 6)
FROM <YOUR_TABLE>

SQL フィドル

于 2012-11-08T17:25:32.117 に答える
0

引数を yearmo としてストアド プロシージャを作成し、部分文字列 (yr) と部分文字列 (mo) を 2 つの変数に保存してから、部分文字列 (mo) が 01 の場合、キャスト後に部分文字列 (yr) をデクリメントし、部分文字列 (mo) を変更します。 12 に追加し、substring と return の両方を追加します。

于 2012-11-08T17:15:13.410 に答える