zoukankan      html  css  js  c++  java
  • sql 自定义split

    以下数据库操作针对sql server.

    问题来源:由于项目中,有的表字段内容是由多个id或多个其他内容拼接而成.(如:'1,2,3,4,5',或者'name_age_school'),特点是都用某个分隔符储存.

    要取得其中的某部分数据内容或者验证某个数据是否在其中.

    方案一 是将数据读取到程序中,然后用程序去操作数据,将数据分割为数组,然后进行操作.最好将分割操作放到一个公用的函数库中.

    方案二:由于我遇到的问题是将其中的 "name" 替换为 "name_age_shcool"中的名字,这两个名字不一致且以后者中的为准. 因此实际意义并没有多大用途.但是客户需求,如果按照方案一的操作,我又将改动后端实现部分.且接口一要修改.

    于是在DB中完成这个字符内容的截取的想法产生了.

    解决方式:

    USE [StudentDB]
    GO
    /****** Object: UserDefinedFunction [dbo].[splitSTR] Script Date: 2016/11/24 16:05:03 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create FUNCTION [dbo].[splitSTR](
    @s varchar(5000), --待分拆的字符串
    @split varchar(10) --分隔符
    )RETURNS @result TABLE(id int ,content varchar(100))
    AS
    BEGIN
    DECLARE @splitlen int
    DECLARE @id int
    SET @splitlen=LEN(@split+'a')-2
    SET @id=1
    WHILE CHARINDEX(@split,@s)>0
    BEGIN
    INSERT @result VALUES(@id,LEFT(@s,CHARINDEX(@split,@s)-1))
    SET @id=@id+1
    SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
    END
    INSERT @result VALUES(@id,@s)
    RETURN
    END

    思路:每遇到一个分隔符,则将前面的字符插入到@result table中,增加id,然后将已插入的字符和分隔符截掉,并且将剩下的字符再次进行查找分隔符,插入@result table 中,增加id, 循环操作.

    只到 @s中不包含  @split 分隔符,则说明已经是最后一个字符.所以此时 直接 插入@result table 中 增加id.

    结果如图:

    变形 取特定位置的某个字符==============================================================================================================

    Create FUNCTION [dbo].[splitSTR](
    @s varchar(8000), --待分拆的字符串
    @split varchar(10), --数据分隔符
    @num int --目标数据
    )RETURNS varchar(100)
    AS
    BEGIN
    declare @des varchar(100)
    DECLARE @splitlen int
    declare @position int
    set @position=1
    SET @splitlen=LEN(@split+'a')-2
    WHILE CHARINDEX(@split,@s)>0
    if @position<>@num
    BEGIN
    SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
    set @position=@position+1
    END
    else
    begin
    set @s=SUBSTRING(@s,1,CHARINDEX(@split,@s)-1)
    set @des=@s
    end
    set @des=@s
    RETURN @des
    END

    思路:和上面相同,在没有只到相应位置的时候,将分隔符去掉,然后循环此操作.

    结果如图

  • 相关阅读:
    Python绘图与可视化
    ArcGIS Python人门到精通目录基于ArcGIS10.2,100以上案例15章42个视频806分钟,51GIS网站上线
    arcpy 重分类
    pythonw.exe不能用
    Pyhton 单行、多行注释符号使用方法及规范
    NumPyArray
    python 日期
    solr多core的处理
    如何在Solr中实现多core查询
    solr之高级查询--联表 join查询
  • 原文地址:https://www.cnblogs.com/troublelost/p/6098980.html
Copyright © 2011-2022 走看看