zoukankan      html  css  js  c++  java
  • SQL利用游标遍历日期查询

    需求:我有个存储过程,每次执行需要带入一个连续的日期。我想遍历执行出一个月的时间,怎么搞?

    我本来的想法是:程序里面写一个for循环,循环里面循环传日期去执行这个存储过程。

    但是同事告诉我用游标,我从来没用过,就尝试了一下,没想到成功了哈哈,记录一下!

    -- 1.声明游标变量
    declare @begin_date varchar(50),
     @sumWeight varchar(50)
    -- 2.声明游标
    declare date_cursor cursor for -- date_cursor 是游标名 ,for 代表做什么
    SELECT * FROM (
     select convert(varchar(10),dateadd(DAY,t2.number,t1.day),120) day from(select '2021-10'+'-01' day) t1,(select number from MASTER..spt_values WHERE TYPE='P' AND number>=0 and number<=31) t2 where convert(varchar(10),dateadd(DAY,t2.number,t1.day),120) like '2021-10%'
    ) T
    WHERE  T.day >= '2021-10-01' AND T.day <= '2021-10-10'
    --3.打开游标
    open date_cursor
    --4.提取数据
    fetch next from date_cursor into @begin_date -- 将查询内容放入变量中
    while @@FETCH_STATUS = 0  -- @@FETCH_STATUS 是一个全局变量,值为0时表示提取成功,存在数据, while 循环表示如果存在数据则执行
    begin
        select @sumWeight= sum(NowNum) from MY_SP_LiTiKuDayStock where TIME=''+@begin_date+''  --我的业务处理
            print '开始时间:'+@begin_date+'当天重量:'+@sumWeight
            --print @begin_date
        fetch next from date_cursor into @begin_date  -- 继续提取下一行
    end
    --5.关闭游标
    close date_cursor
    --6.释放游标
    deallocate date_cursor

    写完大概就知道了:游标是个结果集,可以把它的每一条结果都给一个变量,你可以循环利用这个变量,相当于简介遍历了这个结果集

    参考:

    【SQL server数据库基础】游标的操作

    https://blog.csdn.net/realoser/article/details/121529498

    SQLServer用sql语句返回一个月所有的天数

    https://blog.csdn.net/weixin_30265171/article/details/95729926

  • 相关阅读:
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Symmetric Tree
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Triangle
    Populating Next Right Pointers in Each Node II
    Pascal's Triangle II
    Pascal's Triangle
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/damugua/p/15738145.html
Copyright © 2011-2022 走看看