请教一个能否用 sql 快速解决的办法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
namaste
V2EX    问与答

请教一个能否用 sql 快速解决的办法

  •  
  •   namaste 2020-09-28 10:40:56 +08:00 1995 次点击
    这是一个创建于 1844 天前的主题,其中的信息可能已经有所发展或是发生改变。
    遇到这样一个问题,表中有一堆卡号,给出的字段有起始卡号,终止卡号,卡是否发掉。号段都是按整数连续的
    举例
    begin_no | end_no | flag
    6666×××01,6666×××05,11122
    6667×××88,6667×××90,121
    .
    .
    .
    6668×××20,6668×××25,112121

    其中 1 是在库,2 是发掉了的

    有没有直接能几句 sql,去除发掉的卡,按连续卡一行的形式呈现

    想要的结果:

    begin_no | end_no | flag
    6666×××01,6666×××03,111
    6667×××88,6667×××88,1
    6667×××90,6667×××90,1
    .
    .
    .
    6668×××20,6668×××21,11
    6668×××23,6668×××23,1
    6668×××25,6668×××25,1
    11 条回复    2020-09-28 14:21:18 +08:00
    jazzychai
        1
    jazzychai  
       2020-09-28 11:05:12 +08:00
    估计得循环一遍...
    namaste
        2
    namaste  
    OP
       2020-09-28 11:15:57 +08:00
    有优雅点的办法吗?没有的话准备导出数据 golang 处理了
    namaste
        3
    namaste  
    OP
       2020-09-28 11:18:28 +08:00
    建个中间表,存下所有卡号跟对应 flag,去掉 flag=2 的,再汇总也是个办法。不过好麻烦,有没有直接能 select 出来的方法
    whisper3032
        4
    whisper3032  
       2020-09-28 11:21:00 +08:00
    这个记录方式就不优雅呀,为啥不是一张卡一行,就为了节省几行空间嘛
    ApachW
        5
    ApachW  
       2020-09-28 11:30:38 +08:00
    可是可以
    ticotic
        6
    ticotic  
       2020-09-28 12:14:33 +08:00
    游标+文本处理函数?
    ticotic
        7
    ticotic  
       2020-09-28 12:30:30 +08:00
    update card set flag=replace("2","");

    如果 flag 是字符串类型的话,试验了下可以有这个效果
    ticotic
        8
    ticotic  
       2020-09-28 12:31:22 +08:00
    语句错了,是这个

    update card set flag=replace(flag,"2", "");

    楼主可以先自建个表先试试
    netnr
        9
    netnr  
       2020-09-28 12:39:51 +08:00
    写逻辑 SQL,遍历 flag,等于 1 取索引对应的号码,得出一列,全是在库,但不是连续的:
    6666×××01
    6666×××02
    6666×××88
    6666×××89
    再想办法合并连续的号码
    ticotic
        10
    ticotic  
       2020-09-28 12:55:06 +08:00
    会错意了,那还是 mysql 游标 内加循环判断再 insert 到新表里应该可以实现,感觉写起来也很麻烦,不必程序里简单

    而且新表还是依旧连续卡号,以后还是会出现其中一些卡又被发掉的情况,容易形成 数据页空洞 和现在遇到的情况吧?
    namaste
        11
    namaste  
    OP
       2020-09-28 14:21:18 +08:00
    感谢大家给的思路,我用了二分法,结合 locate 跟 posstr 函数。建了两张中间表相互 insert,搞定了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5378 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 06:02 PVG 14:02 LAX 23:02 JFK 02:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86