SQL Server获取月度列表
-- 获取月度列表
if exists(select 1 from sysobjects where name = 'proc_GetDateMonthList' and type = 'p')
drop proc proc_GetDateMonthList
GO
create proc proc_GetDateMonthList
@BeginDate varchar(6)
,@EndDate varchar(6)
,@Delimiter varchar(1) = ','
as
/* */
declare
@iBegin int, @iEnd int, @iBeginMon int, @iEndMon int, @iYear int, @iMon int, @iTempYear int, @iTempMon int, @iStart int , @iStop int,
@sBeginMon varchar(2), @sEndMon varchar(2), @sResult varchar(8000), @s varchar(6)
begin
if (LEN(@BeginDate) <> 6) or (LEN(@EndDate) <> 6)
begin
raiserror('日期格式错误!', 16, 1)
return
end
if (CAST(@EndDate as int) - cast(@BeginDate as int)) < 0
begin
raiserror('日期范围错误!', 16, 1)
return
end
if @BeginDate = @EndDate
begin
select @BeginDate
return
end
select @iBegin = SUBSTRING(@BeginDate, 1, 4), @iEnd = SUBSTRING(@EndDate, 1, 4)
set @iYear = @iEnd - @iBegin
if @iYear < 0
begin
raiserror('日期范围错误!', 16, 1)
return
end
if @iYear > 90
begin
raiserror('日期范围错误,最大跨年限度为90年!', 16, 1)
return
end
-- 开始处理
set @sResult = ''
select @iBeginMon = SUBSTRING(@BeginDate, 5, 2), @iEndMon = SUBSTRING(@EndDate, 5, 2)
-- 不跨年
if @iYear = 0
begin
set @iMon = @iEndMon - @iBeginMon
if @iMon > 0
begin
set @sResult = @BeginDate
set @iTempMon = 0
while @iTempMon < @iMon - 1
begin
set @s = CAST(@BeginDate as int) + 1
set @sResult = @sResult + @Delimiter + @s
set @iTempMon = @iTempMon + 1
end
set @sResult = @sResult + @Delimiter + @EndDate
end
end
-- 跨年
if @iYear > 0
begin
-- 从开始到结束,每次+1,当月份 > 12 年度进1,月度归1
select @iStart = @BeginDate, @iStop = @EndDate
while @iStart <= @iStop
begin
select @iTempYear = SUBSTRING(convert(varchar(6),@iStart), 1, 4), @iTempMon = SUBSTRING(convert(varchar(6),@iStart), 5, 2)
if @iTempMon > 12
begin
set @iStart = (@iTempYear + 1)*100 + 1
end
set @s = CONVERT(varchar(6), @iStart)
--整合结果
if LEN(@sResult) = 0
set @sResult = @s
else
set @sResult = @sResult + @Delimiter + @s
set @iStart = @iStart + 1
end
end
select @sResult
end
GO -- Test
exec proc_GetDateMonthList '201210', '201512'
SQL Server获取月度列表的更多相关文章
- SQL Server获取下一个编码字符串的实现方案分割和进位
我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方 ...
- SQL Server获取下一个编码字符实现继续重构与增强
我在SQL Server获取下一个编码字符实现的博文中,虽然实现了这个问题,但是感觉维护起来比较麻烦,例如如果调整编码字符串的固定长度,就需要变更三个函数,这样的为何成本确实比较大.面向对象编 ...
- SQL SERVER获取数据库文件信息
MS SQL SERVER 获取当前数据库文件等信息,适用于多个版本: SELECT dbf.file_id AS FileID , dbf.name AS [FileName] , s.fi ...
- SQL Server获取指定行的数据
SQL Server获取指定行(如第二行)的数据 --SQL Server获取指定行(如第二行)的数据-- --法一(对象法)-- select * from ( select * , numbe ...
- 常用脚本--SQL Server获取OS日志
--=================================================== --SQL Server获取OS日志: ), ), ), ) select @start_d ...
- SQLServer数据库之SQL Server 获取本周,本月,本年等时间内记录
本文主要向大家介绍了SQLServer数据库之SQL Server 获取本周,本月,本年等时间内记录,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. datediff(we ...
- SQL Server获取下一个编码字符实现
周末看到SQL Server 大V潇湘隐者的获取下一个编码字符串问题,本来作为以上博文的回复,也许回复内容长度超过其允许限制,无法提交.鉴于此,特记录SQL Server实现过程,方便自己回顾和查阅. ...
- SQL Server 获取服务器信息
最近做了一个小工具,里面涉及到一些取SQL Server 服务器信息的一些东西,找了好久,找到一个不错的,贴出来分享. 系统函数 SERVERPROPERTY ( propertyname ) 包含要 ...
- C# 与Sql server 获取数据和执行命令
C#数据库命封装在 System.Data.SqlClient 之中: 从使用的数据库中获取连接串connectionstring:"server=xx.xxx.xx.xx,xxxx: da ...
随机推荐
- js switch 扩展
//demo var num=99 switch(n){ case 80<n: document.write("优秀");break; case 70<n: docum ...
- 今天第一次接触到typescript,看了第一个知识点就是变量的声明,来回忆回忆,做做笔记
以前只用过JavaScript原生写网站特效,今天还是第一次听说typescript的,然后看了一下它的基本知识,感觉很像Java,真的太像了,但是又有不同点.很让我惊奇看到的第一个知识点就和以前不同 ...
- 关于unity中C#使用WaitForSeconds的方法
//我有一段这样的代码,我要实现3秒后执行内容,JS是这样写的 function Update () { load (); } function load (){ //等待3秒执行语句 yield W ...
- 使用bat脚本添加JAVA_HOME和修改PATH
add_jre.bat ::添加环境变量JAVA_HOME @echo off echo 添加java环境变量 set regpath=HKEY_LOCAL_MACHINE\SYSTEM\Curren ...
- java return
return语句的作用: 1.返回一个值,可以是任意类型的 2.使程序返回到操作系统,或者说是代表"已经做完,离开此方法" ---------------------------- ...
- 在VS2013中使用Log4net
大致分为3个步骤 引用Log4net
- SolrCloud分布式集群部署步骤
Solr及SolrCloud简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成 ...
- hdu 1010 深搜+剪枝
深度搜索 剪枝 还不是很理解 贴上众神代码 //http://blog.csdn.net/vsooda/article/details/7884772#include<iostream> ...
- 远程调试js注意事项
1:使用host切换工具,先注释掉93服务器的地址,打开链接,点击高级选项,进去后登陆账号密码(如果不行重启浏览器): 2:进入后,增加93服务器上的host地址,重启浏览器,css样式生效: 3:使 ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...