关于时间间隔的问题,请教大家.

delwin 2004-08-09 09:28:33
假如我是2004-07-14上的班,那么我用这个如果实现我上了几天班?
select datediff(day,'2004-07-14','?')后面那个参数应该是7月最后一天,但是我怎么得到呢?
CASE语句里面的一部分:
then tb.atm_jyje/datediff(day,tb.actualdate,'?') else 0 end
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
了缘 2004-08-10
  • 打赏
  • 举报
回复
select datediff(day,'2004-07-14',dateadd(day,-1,'2004-08-01'))
zjcxc 2004-08-10
  • 打赏
  • 举报
回复
--1号到2号才算是一天的,如果1号到1号已经算一天的话,则改为:

set @stdate='2004-06-01'
set @eddate='2004-07-14'

set @tpdate=@stdate
while @tpdate<@eddate
begin
set @s3=@s3+cast(datediff(day,@tpdate,dateadd(month,1,@tpdate-day(@tpdate)+1)) as varchar(10))+','
set @tpdate=dateadd(month,1,@tpdate)
end

print @s3
delwin 2004-08-09
  • 打赏
  • 举报
回复
--示例

declare @dt datetime
select @dt='2004-07-14'
select datediff(day,@dt,dateadd(month,1,@dt-day(@dt)+1)-1)


后面不应该减1的

declare @dt datetime
select @dt='2004-07-14'
select datediff(day,@dt,dateadd(month,1,@dt-day(@dt)+1))

delwin 2004-08-09
  • 打赏
  • 举报
回复

set @stdate='2004-06-01'
set @eddate='2004-07-14'

set @tpdate=@stdate
while @tpdate<@eddate
begin
set @s3=@s3+cast(datediff(day,@tpdate,dateadd(month,1,@tpdate-day(@tpdate)+1)-1) as varchar(10))+','
set @tpdate=dateadd(month,1,@tpdate)
end

print @s3

----------------------
29,30,

怎么每个月都差一天啊?

delwin 2004-08-09
  • 打赏
  • 举报
回复
那么给定一个时间范围如
从'2004-05-01'到'2004-08-01'
那么我想得到这段时间每个月天数组成字符串
'31,30,31,31'
zheninchangjiang 2004-08-09
  • 打赏
  • 举报
回复
下个月的第一天减去1天
select dateadd(month,1,getdate()-day(getdate())+1)-1
zjcxc 2004-08-09
  • 打赏
  • 举报
回复
--示例

declare @dt datetime
select @dt='2004-07-14'
select datediff(day,@dt,dateadd(month,1,@dt-day(@dt)+1)-1)
delwin 2004-08-09
  • 打赏
  • 举报
回复
select tb.atm_ztdesc,(select 项目=ratio_name from ratio where ratio_num=3),
sum(case when convert(varchar(7),tb.atm_jydate,120)='2004-06' then tb.atm_jyje/datediff(day,tb.atm_actualdate,'2004-06-30') else 0 end) as [2004-06]
from
(select a.atm_machnum,atm_jyje,atm_jydate,ratio_num,data_kind ,c.atm_ztdesc
from atm_jyinfo a,atm_baseinfo b,atm_ztinfo c
where a.atm_machnum=b.atm_machnum and b.atm_onsite=c.atm_ztnum
and a.atm_machnum in (select atm_machnum from contract_atminfo where contract_num='0001')
and a.atm_jydate>='2004-06-01' and a.atm_jydate<='2004-07-31' and ratio_num=3 and data_kind=1 ) tb group by tb.atm_ztdesc


那里我暂时用2004-06-30代替了,但这样写太死了。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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