qq_39372401 2017-12-09 02:28 采纳率: 75%
浏览 994
已采纳

这样的SQL SERVER存储过程该怎么写

create PROCEDURE [dbo].[bb_sx_sclr]
@KSRQ varchar(20), --开始时间
@JSRQ varchar(20) --结束时间
as
begin
create table t_sclr( --建一张空表,将数据传进去
月份 datetime
)
--补 时分秒,实现12月份查询是从12-01到12-31
if LEN(@KSRQ)<11
set @KSRQ=@KSRQ+' 00:00:00'

--补 时分秒,实现12月份查询是从12-01到12-31
if LEN(@JSRQ)<11
set @JSRQ=@JSRQ+' 23:59:59'

要得到这样的报表(按照传入的两个参数,显示时间段的年月值)
月份
-2014-01
2014-02

  • 写回答

2条回答 默认 最新

  • qq_41325494 2017-12-09 03:57
    关注

    图片说明

    CREATE PROCEDURE DBO.BB_SX_SCLR(@KSRQ VARCHAR(20),@JSRQ VARCHAR(20)) AS
    BEGIN
    DECLARE @DATE_S DATETIME,@DATE_E DATETIME --定义时间格式的日期变量
    DECLARE @DATE_TMP DATETIME --交换日期用的临时变量
    BEGIN TRY --开始校验输入是否合法
    SET @DATE_S =CONVERT(DATETIME,@KSRQ) --转换输入的字符串日期到时间格式的变量
    SET @DATE_E =CONVERT(DATETIME,@JSRQ) --转换输入的字符串日期到时间格式的变量
    IF @DATE_S>@DATE_E --如果开始日期大于结束日期,则交换,允许用户输入日期大小相反
    BEGIN
    SET @DATE_TMP=@DATE_S
    SET @DATE_S=@DATE_E
    SET @DATE_E=@DATE_TMP
    END
    END TRY
    BEGIN CATCH --错误处理,校验不通过则输出'0000-00'
    SELECT '0000-00' LIST
    RETURN
    END CATCH

    DECLARE @CHAR_MONTH VARCHAR(3)                  --定义月份的字符串临时变量
    CREATE TABLE #TMP_BB_SX_SCLR(LIST VARCHAR(7))   --定义存储输出数据的临时表
    
    WHILE (DATEPART(YYYY,@DATE_S)*12+DATEPART(MM,@DATE_S)<=DATEPART(YYYY,@DATE_E)*12+DATEPART(MM,@DATE_E))
                                                    --比较条件:当前年份*12<=目标年和月份则继续
    BEGIN
        SET @CHAR_MONTH=CONVERT(VARCHAR(2),DATEPART(MM,@DATE_S))        --转换当前月份的数据类型到字符串
        SET @CHAR_MONTH='0'+@CHAR_MONTH                                 --在月份前加“0”
        SET @CHAR_MONTH=SUBSTRING(@CHAR_MONTH,LEN(@CHAR_MONTH)-2+1,2)   --截取最后两位确保月份为1和2的时候其显示为01和02
    
        INSERT INTO #TMP_BB_SX_SCLR(LIST) VALUES(CONVERT(VARCHAR(4),DATEPART(YYYY,@DATE_S))+'-'+@CHAR_MONTH)
        SET @DATE_S=DATEADD(MM,1,@DATE_S)                               --当前月份+1
    END
    SELECT LIST FROM #TMP_BB_SX_SCLR ORDER BY LIST ASC                  --按照先后顺序返回需要的结果列表
    DROP TABLE #TMP_BB_SX_SCLR
    

    END

    EXEC BB_SX_SCLR '2017-12-01','2019-2-1'
    EXEC BB_SX_SCLR '2019-2-1','2017-12-01'

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置