使用标准CAST而不是CONVERT

时间:2013-08-16 10:42:24

标签: sql-server sql-server-2012 standards

这些工作在检索本月的第一个月时,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 个答案:

答案 0 :(得分:3)

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

select (year(DATEADD(mm,DATEDIFF(mm,0,@Now)-5, 0))*10000 +
        month(DATEADD(mm,DATEDIFF(mm,0,@Now)-5, 0))*100
        +1)

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

答案 2 :(得分:1)

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

SELECT REPLACE(CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, @now) - 5, 0) AS DATE), '-', '')

答案 3 :(得分:0)

有效的方法是

select dateadd(month,datediff(month,0,@now)-5,0)