2016-08-15 61 views
0

在SQL中,我有一個條件從YYYYMM值中減去一個月。請幫助我。我能得到答案下面從yearmon減去月份

select 201608 - 1; 

但是,當它是01月,它不工作。

幫我解決這個問題,如果條件不檢查01個月!

我還通過DATADD和DATEDIFF函數去了,但能不能得到結果如預期

+0

您使用PostgreSQL或SQL Server嗎?你已經標記了兩個。 – Nicarus

+0

這不是「yearmonth」。這是一個整數。你不能指望你使用的任何數據庫都很聰明,並且認識到它是什麼。你必須告訴數據庫這是一個日期/時間值。直到你這樣做,你所做的只是分析兩個常規數字,數據庫將很樂意執行標準算術。 –

+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 - 我得到了你的建議,謝謝你的答案 'Select substring(convert(varchar(10),DateAdd(MM,-1,cast(cast(201608 as varchar(10))+' 01'as date)),11​​2),1,6)' – CIPHER

+0

@CIPHER幹得好你可以通過CONVERT排除子字符串(INTEGER,CONVERT(VARCHAR,DateAdd(MM,-1,cast(cast(201608 as varchar ))+'01'as date)),11​​2))/ 100 –

0

SQL包含日期操作功能。使用這些:

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

+0

這是一個T-SQL示例 - 用MS SQL和使用不同語法的Postgres標記了您的問題 – Wes

0

日期或者您可以使用一些數學爲INT轉換成基地12 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