这些在 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
?
这些在 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
?
好吧,你可以这样做,但它不使用cast()
:
select (year(DATEADD(mm,DATEDIFF(mm,0,@Now)-5, 0))*10000 +
month(DATEADD(mm,DATEDIFF(mm,0,@Now)-5, 0))*100
+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
在这里扩展 Madhivanan 的答案是如何使用 CAST 而不是 CONVERT :)
SELECT REPLACE(CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, @now) - 5, 0) AS DATE), '-', '')
有效的方法是
select dateadd(month,datediff(month,0,@now)-5,0)