2013-08-16 71 views
0

這些工作檢索第一月,6個月前的時候:使用標準的CAST而不是CONVERT

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我達到同樣的效果?

回答

3

嗯,你可以這樣來做,但它不使用cast()

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

+1治療的日期數字 –

+0

的('CONVERT'是在這種情況下非常有用!) – whytheq

+0

有趣的解決方案 - 謝謝。不記得他的確切推理,但最近我在一個由Itzik B-G運行的課程中,他有一個特殊的理由不使用'0',而是使用'19000101'。 – whytheq

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 
+0

+1替代品,並回答使用'CAST' – whytheq

0

的有效的方法是

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

.....但我試圖將結果導入INT格式爲YYYYMMDD的日期? – whytheq

+0

這是演示文稿問題。你爲什麼想用CAST來做呢? – Madhivanan

+0

...這不是一個演示文稿問題 - 它是一個不同的類型。原因是在OP中提到的 - 我不想使用MS的transact-sql函數'CONVERT',但使用標準的sql函數'CAST'。 – whytheq

1

擴大Madhivanan的回答這裏r是你如何使用CAST而不是CONVERT :)

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

+1「擴大」是一個非常外交的用語! – whytheq

相關問題