求一SQL语句

zhangfeng7398 2004-10-14 12:40:16
根据一个字段(fdate),它是8位年月日,如20041014,想得到另一增加的字段(预计入帐日)4天后的8位年月日(当天不算),如果中间有星期六日则跳过。
如:
2004年10月14日 2004年10月15日 2004年10月16日 2004年10月17日 2004年10月18日
星期四 星期五 星期六 星期日 星期一
fdate 预计入帐日
20041014 20041020
20041015 20041021
20041016 20041021
20041017 20041021
20041018 20041022

怎么写啊?
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2004-10-14
  • 打赏
  • 举报
回复
這種要用到動態sql語句﹐請你參考


create table tb(名稱 varchar(10),數量 numeric(10),類型 varchar(5))
Insert into tb
select 'L001','1','A'
union all select 'L001','2','B'
union all select 'L002','5','C'
union all select 'L003','6','D'
union all select 'L004','9','A'
union all select 'L004','5','D'

select * from tb

declare @sql varchar(1000)
set @sql=''
select @sql=@sql+',['+max(類型)+']=sum(case 類型 when '''+max(類型)+''' then 數量 else 0 end)'
from tb group by 類型 --order by 類型
print @sql

exec('select 名稱'+@sql+' from tb group by 名稱')
--結果
名稱 A B C D
----------------------------------------
L001 1 2 0 0
L002 0 0 5 0
L003 0 0 0 6
L004 9 0 0 5
victorycyz 2004-10-14
  • 打赏
  • 举报
回复

日期为什么要用字符型?人为地使得查询语句复杂了很多。
victorycyz 2004-10-14
  • 打赏
  • 举报
回复


select fdate,
预计入帐日=convert( varchar(8),
dateadd(day, ( case when wd <3 then 4
when wd between 3 and 6 then 6
else 5
end
),
cast ( left(fdate,1)
+'-'+
substring(fdate,5,2)
+'-'+
right(fdate,2)
as datetime
),
112
)
from ( select fdate ,
wd=datepart(w, cast(left(fdate,1)
+'-'+substring(fdate,5,2)
+'-'+right(fdate,2)
as datetime
)
from tableaname
) a
zhangzs8896 2004-10-14
  • 打赏
  • 举报
回复
TO 楼上:
好象楼主说的并不是fdate是否为星期六、星期日,而是中间的
zsforever 2004-10-14
  • 打赏
  • 举报
回复
支持下种方法,(2楼的)
select fdate,case datepart(dw,fdate)
when 6 then dateadd(day,5,fdate)
when 7 then dateadd(day,4,fdate)
when 1 then dateadd(day,4,fdate)
else dateadd(day,6,fdate) end end 预计入帐日,
datepart(dw,fdate) from yourTable
zhangzs8896 2004-10-14
  • 打赏
  • 举报
回复
--测试:
--添加测试表以及数据
create table tb(fdate datetime)
insert into tb
select '20041014' union all
select '20041015' union all
select '20041016' union all
select '20041017' union all
select '20041018'

--查询
select fdate=replace(convert(varchar(10),fdate,120),'-','')
,预计入帐日= case when datename(weekday,dateadd(day,1,fdate))='星期六'or
datename(weekday,dateadd(day,2,fdate))='星期六' or
datename(weekday,dateadd(day,3,fdate))='星期六' or
datename(weekday,dateadd(day,4,fdate))='星期六'
then replace(convert(varchar(10),dateadd(day,6,fdate ),120),'-','')
else
case when datename(weekday,dateadd(day,1,fdate ))='星期日' or
datename(weekday,dateadd(day,2,fdate ))='星期日' or
datename(weekday,dateadd(day,3,fdate ))='星期日' or
datename(weekday,dateadd(day,4,fdate ))='星期日'
then replace(convert(varchar(10),dateadd(day,5,fdate ),120),'-','')
else
replace(convert(varchar(10),dateadd(day,4,fdate),120),'-','')
end
end

from tb

--删除表
drop table tb

--运行结果:
fdate 预计入帐日
20041014 20041020
20041015 20041021
20041016 20041021
20041017 20041021
20041018 20041022

--楼主可以自己查看一下是否还有别的没考虑到,自己添到case when 中即可。
zhangzs8896 2004-10-14
  • 打赏
  • 举报
回复
麻烦点的:
declare @f datetime
set @f='20041014'
select fdate=replace(convert(varchar(10),@f,120),'-','')
,预计入帐日= case when datename(weekday,dateadd(day,1,@f))='星期六'or
datename(weekday,dateadd(day,2,@f))='星期六' or
datename(weekday,dateadd(day,3,@f))='星期六' or
datename(weekday,dateadd(day,4,@f))='星期六'
then replace(convert(varchar(10),dateadd(day,6,@f),120),'-','')
else
case when datename(weekday,dateadd(day,1,@f))='星期日' or
datename(weekday,dateadd(day,2,@f))='星期日' or
datename(weekday,dateadd(day,3,@f))='星期日' or
datename(weekday,dateadd(day,4,@f))='星期日'
then replace(convert(varchar(10),dateadd(day,5,@f),120),'-','')
else
replace(convert(varchar(10),dateadd(day,4,@f),120),'-','')
end
end

---结果:
fdate 预计入帐日
20041014 20041020
victorshy 2004-10-14
  • 打赏
  • 举报
回复
select fdate,(case datepart(dw,fdate)
when 6 then dateadd(day,5,fdate)
when 7 then dateadd(day,4,fdate)
when 1 then dateadd(day,4,fdate)
else dateadd(day,6,fdate)end )as 'ruzhang' ,
datepart(dw,fdate) from da

你看可以嘛,我试的时候直接用的datetime类型

34,873

社区成员

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

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