SQL Server查询优化日期计算
我试图找到一种更有效的方式来重新编写我的查询。SQL Server查询优化日期计算
有什么建议吗?我目前也在考虑将会计月份名称显示为数字本身,然后比较并返回月份名称。
(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)
+1这对我很好。 谢谢。 你能否用简单的'英文'来解释它背后的逻辑? :) – camelbrush 2013-05-04 20:02:30
@camelbrush - 第一部分'将制造年份从一个整数转换为一个字符串。藏在里面的是'情况',如果你指定的条件匹配,从一年中减去一个,否则它减去零。这需要处理示例代码的第一部分和第二部分之间的唯一区别(请原谅双关语)。最后一行连接短划线,然后处理月份。月份编号是从整数转换为字符串。由于它可能是一位或两位数字,因此在左侧添加一个零,然后采用“正确”两个字符。 – HABO 2013-05-04 21:04:01
为什么冗长'情况下FM.fiscal_month_name比如'Jan%',然后'01',当......结束时,而不仅仅是FM.fiscal_month_no? – 2013-05-04 15:16:27
+1是的。那是更好的方法。只要将该数字转换为varchar即可。谢谢。 :) – camelbrush 2013-05-04 20:01:42