Performance SQL Server查询优化日期计算

Performance SQL Server查询优化日期计算,performance,sql-server-2008,Performance,Sql Server 2008,我试图找到一种更有效的方法来重新编写我的查询 有什么建议吗?我目前也在考虑将财政月份名称本身显示为一个数字,然后比较并返回月份名称 (case --proj_end_fis_mon when (MYMW.mfg_year_no = FYQM.fiscal_year_no and MYMW.mfg_month_no = 12) then (convert(va

我试图找到一种更有效的方法来重新编写我的查询

有什么建议吗?我目前也在考虑将财政月份名称本身显示为一个数字,然后比较并返回月份名称

(case                                   --proj_end_fis_mon
    when (MYMW.mfg_year_no = FYQM.fiscal_year_no and MYMW.mfg_month_no = 12)
    then                    
        (convert(varchar,(MYMW.mfg_year_no-1))+'-'+(case
            when FM.fiscal_month_name like 'Jan%' then '01'
            when FM.fiscal_month_name like 'Feb%' then '02'
            when FM.fiscal_month_name like 'Mar%' then '03'
            when FM.fiscal_month_name like 'Apr%' then '04'
            when FM.fiscal_month_name like 'May' then '05'
            when FM.fiscal_month_name like 'June' then '06'
            when FM.fiscal_month_name like 'July' then '07'
            when FM.fiscal_month_name like 'Aug%' then '08'
            when FM.fiscal_month_name like 'Sep%' then '09'
            when FM.fiscal_month_name like 'Oct%' then '10'
            when FM.fiscal_month_name like 'Nov%' then '11'
            when FM.fiscal_month_name like 'Dec%' then '12'
            end))
    else
    (convert(varchar,MYMW.mfg_year_no)+'-'+(case
    when FM.fiscal_month_name like 'Jan%' then '01'
    when FM.fiscal_month_name like 'Feb%' then '02'
    when FM.fiscal_month_name like 'Mar%' then '03'
    when FM.fiscal_month_name like 'Apr%' then '04'
    when FM.fiscal_month_name like 'May' then '05'
    when FM.fiscal_month_name like 'June' then '06'
    when FM.fiscal_month_name like 'July' then '07'
    when FM.fiscal_month_name like 'Aug%' then '08'
    when FM.fiscal_month_name like 'Sep%' then '09'
    when FM.fiscal_month_name like 'Oct%' then '10'
    when FM.fiscal_month_name like 'Nov%' then '11'
    when FM.fiscal_month_name like 'Dec%' then '12'
    end))


    end)
这就是我的桌子的样子:


假设您有可用的会计月号:

Convert( VarChar(4), MYMW.mfg_year_no -
    case when MYMW.mfg_year_no = FYQM.fiscal_year_no and MYMW.mfg_month_no = 12 then 1
      else 0 end ) +
    '-' + Right('0' + Convert( VarChar(2), FM.fiscal_month_no ), 2 )

为什么当FM.fiscal\u month\u名称像'Jan%'然后是'01'时会出现冗长的
情况。。。结束
而不仅仅是
FM.财政月号
?+1是。那可能是更好的办法。只是将num转换为varchar。谢谢。:)+1这对我来说太好了。谢谢你能用更简单的“英语”术语解释一下背后的逻辑吗@camelbrush-第一部分
将生产年份从整数转换为字符串。它的内部是
案例
,如果您指定的条件匹配,则从年份中减去一,否则将减去零。这就解决了示例代码的上半部分和下半部分之间的唯一区别(请原谅这个双关语)。最后一行连接破折号,然后处理月份。月数是从整数转换为字符串的
convert
ed。因为它可能是一个或两个数字,所以在左侧加上一个零,然后取
右侧的
两个字符。