如何把加了Case的某列,作为变量使用?

linjiangxian11 2017-12-27 08:49:35
合同表(ContractTable)中有合同起始日(LeaseDateFrom)和合同终止日(LeaseDateTo)。一般来说合同期限整年整年的,那么LeaseDateFrom和 LeaseDateTo之间的日期相差1年、2年、3年。。。。。。


现在出现了特殊情况,例如:LeaseDateFrom是2017-5-1,LeaseDataTo是2018-12-31,相差不是整年。




我希望如果两个日期相差不是整年的时候,给LeaseDateFrom加一个Case,变成新的一列“time1”,让这个time1增加到和LeaseDateTo保持相差是整年的关系。

也就是我把LeaseDateFrom (2017-5-1)用time1代替。time1的值经过Case的运算后为2017-1-1,这样time1和 LeaseDateTo之间相差正好又是整年了,之后就用time1取代LeaseDateFrom进行运算。



============问题================


因为我的SQL语句中含有海量的这种time1,如果全部都傻傻的每次都用Case判断一次,代码需要写几千行。


因此,我觉得应该把time1先以变量的形式,声明在SQL语句的最开头。


然而,图1中的time1并不能把象变量或字段那样直接在 SQL中使用,否则就会出现错误提示:“列名time1无效”。请问该如何处理呢?




=============代码=====================
select 
(case
when DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo))%12 =0
then LeaseDateFrom
else DATEADD(YEAR,-(DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo))/12+1),DATEADD

(DAY,1,LeaseDateTo))
end) as time1

,LeaseDateFrom
,LeaseDateTo
,DATEDIFF (MONTH,time1,DATEADD(day,1,LeaseDateTo)) as 'time1到LeaseDateTo的月份'
,DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo)) as 'LeaseDateFrom到LeaseDateTo的月份'

from ContractTable


============图1================

...全文
262 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2017-12-28
  • 打赏
  • 举报
回复
定义一个变量,比如@startdate 然后执行之前,判断@startdate是不是xxxx年1月1号,如果不是就设置为xxxx年1月1号。
日月路明 2017-12-28
  • 打赏
  • 举报
回复
create view ContractTableView as select (case when DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo))%12 =0 then LeaseDateFrom else DATEADD(YEAR,-(DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo))/12+1),DATEADD (DAY,1,LeaseDateTo)) end) as time1 ,LeaseDateFrom ,LeaseDateTo ,DATEDIFF (MONTH,time1,DATEADD(day,1,LeaseDateTo)) as 'time1到LeaseDateTo的月份' ,DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo)) as 'LeaseDateFrom到LeaseDateTo的月份' from ContractTable 以后都用ContractTableView,就没问题了

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧