zoukankan      html  css  js  c++  java
  • SQL SERVER 函数举例

    需求说明

    将字符串按照指定的分隔符进行分割,并将结果按照从后往前的顺序倒序排列,拼接后的结果用‘/’符连接。(也可以按照指定符号分割为多个列,修改最后一部分即可)

    创建测试表及数据

    /*  创建一张测试表及数据 */
    create table tmp(id int primary key ,name varchar(200));
    
    insert into   tmp
    select 1,'组长,班长,校长,委员长';
    insert into   tmp
    select 2 ,'连长,营长,师长,军长,司令';
    insert into   tmp
    select 3 ,'村长,镇长,区长,市长,厅长,省长,部长';

    创建函数

     create  FUNCTION [dbo].[f_split]
    (
    @str NVARCHAR(500),
    @delimiter NVARCHAR(20)
    )RETURNS @table2 TABLE(val NVARCHAR(500))
    AS
    BEGIN 
        DECLARE @index INT,@startsplit INT,@id INT ,@maxid int,@id2 int
        declare @table table (id int,val nvarchar(50))
        SELECT @index=CHARINDEX(@delimiter,@str),@startsplit=1,@id=1
        WHILE @index>0
        BEGIN
            IF @id>1  
            BEGIN 
                SELECT @startsplit=@index+LEN(@delimiter) 
                SELECT @index=CHARINDEX(@delimiter,@str,@startsplit)
                
            END 
            IF @index>0  
                BEGIN 
                    INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit)) 
                END 
            ELSE 
            BEGIN   
                INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1))
            END 
            SELECT @id=@id+1
        END
        select @id2=Min(id) from  @table
        select @maxid=MAX(id) from  @table
        insert into @table2 select val from @table where id=@maxid
        select @maxid= @maxid -1
        while @id2<=@maxid
        begin
        update @table2 set val=val+'/'+(select val from @table where id=@maxid )
        select @maxid =@maxid- 1
        
        end
        
        RETURN 
    END

    执行查询

    select  name,(select val from  [f_split](name,',')) 
    from  tmp;

    结果如下

     TIPs:

    以上函数包含字符串截取函数、字符串长度、字符串位置等,如需获取该函数的每步说明可以联系我获取,谢谢。

  • 相关阅读:
    从 0 开始带你成为消息中间件实战高手
    jenkins升级2.249版本后 节点(Node)配置的启动方式中没有Launch agent via Java Web Star
    Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
    centOS7 gradle版本升级
    使用PDB调试Python程序
    pytest在控制台的方式下提示找不到包
    docker-compose文件详解
    storm案例分析
    strom 简单案例
    springboot实现读写分离
  • 原文地址:https://www.cnblogs.com/gjc592/p/12853524.html
Copyright © 2011-2022 走看看