在T-SQL中使用Oracle中的TRUNC函数

时间:2017-09-13 17:58:17

标签: oracle function datetime procedure

所以我正在进行从Oracle到MS SQL Server 2012的过程和函数转换。

在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 Server,如:

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

我得到以下结果:2019-02-28 00:00:00.000

我不确定为什么我要在T-SQL上再度一年。我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分: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)))