2017-09-13 51 views
0

所以我在從Oracle做過程和函數轉換到MS SQL服務器的過程中正在使用TRUNC函數2012從Oracle在T-SQL

在Oracle中,我有以下的select語句:

--Add 5 months less one day to the quarter, ie 1/1/09 returns 5/31/09 
SELECT ADD_MONTHS(TRUNC(to_date('1-dec-2017'), 'q'), 5) - 1 FROM DUAL; 

而我得到的回報以下值:

28-FEB-18 

我試圖把它轉換成MS SQL服務器,如:

SELECT dateadd(m, 0, convert(datetime, dateadd(q, 5,convert(datetime,'1-dec-2017')))) - 1 

而且我得到以下結果:2019-02-28 00:00:00.000

我不知道爲什麼我收到額外一年在T-SQL。我會感謝一些幫助。謝謝。

+0

你加入5個季度,而不是5個月。 –

+0

我試過了:'SELECT dateadd(m,5,convert(datetime,'1-dec-2017')) - 1' 我在TSQL中得到回報2018-04-30 –

回答

1

要截斷到季度,看What is the best way to truncate a date in SQL Server?

SELECT DATEADD(Q, DATEDIFF(Q, 0, convert(datetime,'1-dec-2017')), 0) 

添加五個月。

SELECT DATEADD(M, 5, DATEADD(Q, DATEDIFF(Q, 0, convert(datetime,'1-dec-2017')), 0)) 

減去一天

SELECT DATEADD(M, 5, DATEADD(Q, DATEDIFF(Q, 0, convert(datetime,'1-dec-2017')), 0)) - 1 
SELECT DATEADD(D, -1, DATEADD(M, 5, DATEADD(Q, DATEDIFF(Q, 0, convert(datetime,'1-dec-2017')), 0)))