欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简化SQL计算之字母分段

程序员文章站 2022-05-17 13:14:06
...

rbd_dtlRBP_VALUE字段存储着字符串“ALL”和一些字母,现在要将该字段拼成分段的字符串,形如: A-F,H,J-K,N-O,Q-S,U-V,X-Z

   源数据如下:


简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
 

具体规则是:

如果RBP_VALUE=ALL”,则舍去该值。

如果RBP_VALUE前后都是连续的字母,则取第一个字母和最后一个字母作为一段,中间用横杠,比如“A-F”。

如果RBP_VALUE出现间隔,比如KN之间缺少LM,则K之前作为一段,N之后作为一段,两段之间用逗号分隔,形如:“J-K,N-O”。

如果RBP_VALUE前后都不连续,比如H前面缺少G,后面缺少I,则当前值单独作为一段。

 

 

  集算器写法


简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
 

        A1:执行SQL

          A2:A1RGB_VALUE按照字母表对齐,部分结果如下:


简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
 

        A3:对A2进行分组,RBD_VALUE等于null时分一组,不等于null时再分一组。@o表示归并式分组,只对前后数据进行比较。结果如下:


简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
 

        A4:选出非空的组。

          A5:根据组内成员个数拼凑字符串。~.m(-1)表示取当前组的最后一条记录。计算结果如下:


简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
 

        A6:用逗号合并集合成员,即:A-F,H,J-K,N-O,Q-S,U-V,X-Z

         事实上只需要取出RBD_VALUE就可以了,代码也可以合并为一句:

 

myDB1.query("select RBD_VALUE from rbd_dtl").(RBD_VALUE).align(26.(char(64+~))).group@o(!~).select(~(1)).(~(1)+if(~.len()>1,"-"+~.m(-1))).string@d()

  • 简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
  • 大小: 27.4 KB
  • 简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
  • 大小: 27.7 KB
  • 简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
  • 大小: 30.4 KB
  • 简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
  • 大小: 45.8 KB
  • 简化SQL计算之字母分段
            
    
    博客分类: DB sql计算字母分段集算器分组 
  • 大小: 6.1 KB