Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何比较两位数月份变量和一位数月份变量?_Sql Server 2008_Casting_Datepart - Fatal编程技术网

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()

停止强制转换为VARCHAR,改用数值。
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]