0

这些在 6 个月前检索当月的第一天时起作用:

DECLARE @Now DATETIME = SYSDATETIME();

--1
SELECT CONVERT(INT,CONVERT(CHAR(8),DATEADD(mm,DATEDIFF(mm,0,@Now)-5,0),112));

--2
SELECT CONVERT(INT,CONVERT(CHAR(6),DATEADD(mm,-5,@Now),112) + '01');

如何使用标准函数获得相同的结果CAST

4

4 回答 4

3

好吧,你可以这样做,但它不使用cast()

select (year(DATEADD(mm,DATEDIFF(mm,0,@Now)-5, 0))*10000 +
        month(DATEADD(mm,DATEDIFF(mm,0,@Now)-5, 0))*100
        +1)
于 2013-08-16T11:05:03.677 回答
1
select cast(year(dateadd(month, -5,@now)) as char(4)) 
+ right(100 + month(dateadd(month, -5,@now)), 2) + '01'

选择:

select cast(year(a.n) as char(4)) + right(100 + month(a.n), 2) + '01'
from (select dateadd(m,-5,@now) n) a
于 2013-08-16T11:04:13.953 回答
1

在这里扩展 Madhivanan 的答案是如何使用 CAST 而不是 CONVERT :)

SELECT REPLACE(CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, @now) - 5, 0) AS DATE), '-', '')
于 2013-08-16T22:32:18.127 回答
0

有效的方法是

select dateadd(month,datediff(month,0,@now)-5,0)
于 2013-08-16T11:33:04.873 回答