在SQL中,我有一個條件從YYYYMM值中減去一個月。請幫助我。我能得到答案下面從yearmon減去月份
select 201608 - 1;
但是,當它是01月,它不工作。
幫我解決這個問題,如果條件不檢查01個月!
我還通過DATADD和DATEDIFF函數去了,但能不能得到結果如預期
在SQL中,我有一個條件從YYYYMM值中減去一個月。請幫助我。我能得到答案下面從yearmon減去月份
select 201608 - 1;
但是,當它是01月,它不工作。
幫我解決這個問題,如果條件不檢查01個月!
我還通過DATADD和DATEDIFF函數去了,但能不能得到結果如預期
Select DateAdd(MM,-1,cast(cast(201608 as varchar(10))+'01' as date))
返回的2016年7月1日
@CIPHER您是否希望將它作爲int 201607? –
@Cappelletti - 我得到了你的建議,謝謝你的答案 'Select substring(convert(varchar(10),DateAdd(MM,-1,cast(cast(201608 as varchar(10))+' 01'as date)),112),1,6)' – CIPHER
@CIPHER幹得好你可以通過CONVERT排除子字符串(INTEGER,CONVERT(VARCHAR,DateAdd(MM,-1,cast(cast(201608 as varchar ))+'01'as date)),112))/ 100 –
SQL包含日期操作功能。使用這些:
SELECT DATEDIFF(DAY, DATEADD(day, -1, @dateToCheck), GETDATE())
這是一個T-SQL示例 - 用MS SQL和使用不同語法的Postgres標記了您的問題 – Wes
日期或者您可以使用一些數學爲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
您使用PostgreSQL或SQL Server嗎?你已經標記了兩個。 – Nicarus
這不是「yearmonth」。這是一個整數。你不能指望你使用的任何數據庫都很聰明,並且認識到它是什麼。你必須告訴數據庫這是一個日期/時間值。直到你這樣做,你所做的只是分析兩個常規數字,數據庫將很樂意執行標準算術。 –
Iam使用SQL Server,錯誤地選擇了Postgre – CIPHER