2017-03-24 20 views
1

は、私が持っているものです。2桁の月変数と1桁の月変数をどのように比較できますか?ここ

select case when cast(datepart(mm, enrollments.enddate) as varchar)<cast(datepart(mm, getdate()) as varchar) 
      then 'Expired' 
      when cast(datepart(m, enrollments.enddate) as varchar)=cast(datepart(m, getdate()) as varchar) 
      then 'Renewal required by end of this month' 
      when cast(datepart(m, enrollments.enddate) as varchar)-1=cast(datepart(m, getdate()) as varchar) 
      then 'Renewal required by end of next month' 
      when cast(datepart(m, enrollments.enddate) as varchar)>cast(datepart(m, getdate()) as varchar) 
      then 'Current' 
      Else null 
     End) as [Certification Status] 

すべての論理がenrollments.enddateの月の12 GETDATE月3を比較すると、結果は12 < 3その先導を示している最初のものを除いて働きます出力には、なぜあなたの代わりにn個の文字列として比較を行っているSQL Server 2008の

Results - Records incorrectly marked Expired

+2

キャストをVARCHARとして停止し、代わりに数値を使用します。 –

答えて

1

を使用する代わりに、12> 3 '現在の'

の '期限切れ'アンバー?文字列が必要な場合は、datename()の代わりにdatepart()を使用するのはなぜですか?

ので:

select (case when datepart(month, enrollments.enddat) < datepart(month, getdate()) 
      then 'Expired' 
      when datepart(month, enrollments.enddate) = datepart(month, getdate()) 
      then 'Renewal required by end of this month' 
      when datepart(month, enrollments.enddate) - 1 = datepart(month, getdate()) 
      then 'Renewal required by end of next month' 
      when datepart(month, enrollments.enddate) as > datepart(month, getdate() 
      then 'Current' 
     End) as [Certification Status] 

注:

  • 利用month代わりにdatepart()ためmまたはmmmonthは、あなたとコードを読んでいる他の人の両方にとって明白で明確です。
  • 文字列が必要な場合はdatename()、数値の場合はdatepart()を使用します。
+0

は完璧に機能しました!ありがとうございました! –

関連する問題