2016-08-15 6 views
0

SQLでは、YYYYMM値から1か月を引く基準があります。親切に私を助けてください。私は以下で回答を得ることができます年月から月を引く

select 201608 - 1; 

しかし、それは01ヶ月のときは動作しません。

もし私がこの状態で01ヶ月をチェックせずに助けてください!

私もDATADDとDATEDIFF機能を通じて行ったが、予想

+0

PostgreSQLまたはSQL Serverを使用していますか?あなたは両方のタグを付けました。 – Nicarus

+0

"年末"ではありません。それは整数です。どのようなDBを使っていても、スマートで何かを認識することはできません。 dbに日付/時刻の値を伝える必要があります。そうするまで、あなたがやっているのは、データベースが喜んで標準的な算術演算を実行する2つの正規の数字を証明することだけです。 –

+0

Iam SQL Serverを使用して、誤ってPostgreを選択しました – CIPHER

答えて

3
Select DateAdd(MM,-1,cast(cast(201608 as varchar(10))+'01' as date)) 

は、2016年7月1日

+0

@CIPHER int 201607として戻しますか? –

+0

@Cappelletti - あなたの提案の助けを借りて答えを得ました。ありがとうございました '部分文字列を選択してください(convert(varchar(10)、DateAdd(MM、-1、cast(201608 as varchar(10))+ 01、 'date))、112)、1,6)' – CIPHER

+0

@CIPHERよくやったよ、CONVERT(INTEGER、CONVERT(VARCHAR、DateAdd(MM、-1、cast(cast)(201608をvarchar ))+ 01(日付))、112))/ 100 –

0

SQLの日付操作関数が含まれているような結果を得ることができませんでした。これらを使用します。

SELECT DATEDIFF(DAY, DATEADD(day, -1, @dateToCheck), GETDATE())

+0

これはT-SQLの例です。異なる構文を使用するMS SQLとPostgresで質問にタグ付けしました。 – Wes

0

の日付を返します。また、あなたがベース12のint、substract月にint型に変換し、元のエンコーディングに戻って戻るために、いくつかの数学を使用することができます。

select d, m, res=(dd/12)*100 + dd%12 + 1 
from (
    select *, (d/100)*12 + d%100 - 1 - m as dd 
    from (--sample data, m = months to substract 
    values 
     (201608, 10), (201608, 2), (201601, 1), (201601, 12) 
    ) t(d,m) 
) t