2012-12-20 157 views
0

我只想比較月份和年份。所以我把它轉換成varchar。它是否正確?SQL Server:比較VARCHAR值

(case 
    when s."AccMonth" >= 1 and s."AccMonth" <= 12 
     then cast(rtrim(s.accmonth) + s.accyear AS varchar) end) 
>= 
cast(month(s.InitialChargeDate) as varchar) + cast(year(s.InitialChargeDate) as varchar) 
  • accmonth & accyear的類型INT
  • InitialChargeDate的類型是DATE
+2

我不是100%清楚你想要的最終結果,但看看datepart函數:http://msdn.microsoft.com/en-us/library/ms174420.aspx – PeterJ

回答

0

你應該使用內置的功能,而不是強制轉換爲VARCHAR:

Month

SELECT MONTH('2007-04-30T01:01:01.1234567 -07:00'); 

返回4

Year

SELECT YEAR('2007-04-30T01:01:01.1234567-07:00'); 

返回2007

2

也許有更好的方式來做到這一點會是這樣的:

s.AccMonth = MONTH(s.InitialChargeDate) 
AND s.accyear = YEAR(s.InitialChargeDate) 

注:鑄造時到沒有長度的varchar規範,默認長度爲1.這可能會影響您的結果。

+0

實際上即時比較這些兩個.. –

+0

好吧,「比較」是什麼意思?我發佈的代碼片段比較;它只是沒有連接而已。 –

+0

當投射到沒有長度規格的varchar時,默認長度是30. –