SQL Server:比较VARCHAR值

时间:2012-12-20 04:20:09

标签: sql-server compare

我只想比较月份和年份。所以我将它转换为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&amp; accyear类型为INT
  • InitialChargeDate的类型为DATE

2 个答案:

答案 0 :(得分:2)

或许更好的方法是:

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

注意:在没有长度规范的情况下转换为varchar时,默认长度为1.这可能会影响您的结果。

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