这就是我所拥有的:
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导致输出'Expired'而不是12&gt; 3'当前的“
使用SQL Server 2008
答案 0 :(得分:1)
为什么要将比较作为字符串而不是数字进行比较?如果您需要字符串,为什么要使用datepart()
代替datename()
?
所以:
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
代替m
或mm
代替datepart()
。 month
对您和其他可能正在阅读代码的人都是明确无误的。datename()
,如果需要数字,请使用datepart()
。