求一关于日期间隔的sql语句

zywhao 2013-06-07 10:54:34
求一个标量值函数

参数:@dtmStart @dtmFinish
功能: 找出两个日期之间天的个位数



如@dtmStart="2013-05-25 10:0:01:035" @dtmStart="2013-06-07 10:0:01:035"
两个日期之间间隔日期为 5-25 5-26 5-27 5-28 5-29 5-30 5-31 6-1 6-2 6-3 6-4 6-5 6-6 6-7

只取每个日期天的个位数: 5,6,7,8,9,0,1,1,2,3,4,5,6,7

重复的合并一下,结果为 "5,6,7,8,9,0,1,2,3,4"
...全文
144 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟之GrowUP 2013-06-07
  • 打赏
  • 举报
回复


CREATE FUNCTION sf_GetDateLastNum
(
  @BDate DATETIME,
  @EDate DATETIME
)
RETURNS VARCHAR(100)
AS
BEGIN
  DECLARE @RetVal VARCHAR(100)
  DECLARE @TBL TABLE(IID INT IDENTITY(1,1), LastDay VARCHAR(1))
  SET @RetVal = ''
 
  INSERT INTO @TBL(LastDay)
  SELECT RIGHT(DAY(DATEADD(DD, NUMBER, @BDate)), 1)
  FROM MASTER..SPT_VALUES 
    WHERE TYPE='p' AND DATEADD(DD, NUMBER, @BDate)<=@EDate
  
  DELETE @TBL WHERE IID NOT IN (SELECT MIN(IID) FROM @Tbl GROUP BY LastDay)
  
  SELECT @RetVal = @RetVal + LastDay + ',' FROM @TBL

  RETURN LEFT(@RetVal, LEN(@RetVal) - 1)
END
GO

SELECT dbo.sf_GetDateLastNum('2013-05-25 10:0:01:035', '2013-06-07 10:0:01:035')
/*
5,6,7,8,9,0,1,2,3,4
*/
哥眼神纯洁不 2013-06-07
  • 打赏
  • 举报
回复

declare @dtmStart  date ='2013-05-25 10:0:01:035'  
declare @dtmFinish date ='2013-06-07 10:0:01:035'
;
with tb as(
select a=@dtmStart 
union all
select DATEADD(day,1,a) from tb where a<@dtmFinish
)
select a=stuff((select ','+substring(convert(varchar,a),10,1) 
from tb for xml path('')),1,1,'')



22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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