• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
皇图霸业谈笑间
更高、更快、更强
博客园    首页    新随笔    联系   管理    订阅  订阅
今天帮别人弄一个根据字段中的逗号分隔符计算每个月批量购买章节总数

首先建立一个计算某分隔符在字符串中含有的个数之函数:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [SplitToTable]
(
    @str        NVARCHAR(MAX),    --字符串
    @seprate    NVARCHAR(2),    --分隔符
    @removeQuot BIT = 0         --为1时,拆分出的字符串如果第1位与最后1位是单引号时,去掉
)
RETURNS @ret TABLE 
        (string NVARCHAR(512))
AS 
BEGIN
    DECLARE @iPos  INT
    DECLARE @i     INT 
    SET @i = 0
    DECLARE @left NVARCHAR(MAX)
    -- Chinese_PRC_CI_AS_KS_WS表示区分全角半角
    SET @iPos = CHARINDEX(@seprate, @str COLLATE Chinese_PRC_CI_AS_KS_WS) --获取分隔符位置
    IF @iPos = 0
    BEGIN
        IF @removeQuot = 1 AND LEFT(@str, 1) = '''' AND RIGHT(@str, 1) = ''''
        BEGIN
            SET @str = SUBSTRING(@str, 2, LEN(@str) - 2)
        END 
        INSERT INTO @ret
          (
            string
          )
        VALUES
          (
            @str
          )
        RETURN
    END
    
    WHILE @iPos > 0
    BEGIN
        SELECT @left = LEFT(@str, @iPos -1),
               @str = RIGHT(@str, LEN(@str) -@iPos)
        
        IF @removeQuot = 1 AND LEFT(@left, 1) = '''' AND RIGHT(@left, 1) = ''''
        BEGIN 
            SET @left = SUBSTRING(@left, 2, LEN(@left) - 2)
        END 
        INSERT INTO @ret
          (
            string
          )
        VALUES
          (
            @left
          )
        SET @iPos = CHARINDEX(@seprate, @str COLLATE Chinese_PRC_CI_AS_KS_WS)
        IF @iPos = 0
        BEGIN
            IF @removeQuot = 1 AND LEFT(@str, 1) = '''' AND RIGHT(@str, 1) = ''''
            BEGIN 
                SET @str = SUBSTRING(@str, 2, LEN(@str) - 2)
            END 
            INSERT INTO @ret
              (
                string
              )
            VALUES
              (
                @str
              )
        END
    END
    RETURN 
END

 

接下来就是循环计算每个字段所含有的个数:

 

declare @BeginTime as datetime set @BeginTime='2013-11-01'
declare @EndTime as datetime set @EndTime='2013-12-01'
declare @TotalCount as int set @TotalCount=0

declare @ChapterIDTable Cursor
 
set @ChapterIDTable= Cursor for select autoid,chapteridinfo from PandaCoinOrder_BulkPayChapter_2016 with(nolock) where createtime>=@BeginTime and createtime<@EndTime
open @ChapterIDTable
declare @AutoID bigint
declare @ChapterIDInfo as varchar(8000)

FETCH NEXT FROM @ChapterIDTable into @AutoID,@ChapterIDInfo
while @@fetch_status=0
 begin
 SELECT @TotalCount=@TotalCount+COUNT(1)-1 FROM dbo.SplitToTable(@ChapterIDInfo, ',', null)  
 Fetch Next From @ChapterIDTable into @AutoID,@ChapterIDInfo
 end

close @ChapterIDTable
deallocate @ChapterIDTable
select @TotalCount

 

今天帮别人做的第一件事情,记录一下。

 

 

 
posted on 2013-12-30 14:52  布颜书  阅读(257)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3