Sql server 2008 如何比较两位数月份变量和一位数月份变量?
以下是我所拥有的:Sql server 2008 如何比较两位数月份变量和一位数月份变量?,sql-server-2008,casting,datepart,Sql Server 2008,Casting,Datepart,以下是我所拥有的: 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 var
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]
选择case when cast(datepart(mm,enrollments.enddate)作为varchar)cast(datepart(m,getdate())作为varchar)
然后是“当前”
否则无效
结束)作为[认证状态]
除第一个逻辑外,所有逻辑都可以工作,其中,将enrollments.enddate月份的12与getdate月份3进行比较,结果显示123为“当前”
使用SQLServer2008
为什么要将比较作为字符串而不是数字?如果需要字符串,为什么要使用
datepart()
而不是datename()
因此:
select(datepart(month,registrations.enddat)时的大小写)datepart(月,getdate()时
然后是“当前”
结束)作为[认证状态]
注:
- 使用
而不是month
或m
作为mm
datepart()
对于您和其他可能正在阅读代码的人来说都是明确无误的month
- 如果需要字符串,请使用
;如果需要数字,请使用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]