2017-09-13 46 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)))