zoukankan      html  css  js  c++  java
  • Sql字符串拆分问题及转换问题

    use WebShowDBAlter
    go
    ---1---
    declare @str nvarchar(50)
    select @str=DodgeRaterID from Student where ID='03'
    select dbo.Get_StrArrayStrOfIndex(@str,',',3)
    
    ---2----
    select dbo.Get_StrArrayStrOfIndex(DodgeRaterID,',',4) from Student
    
    --3--
    select * from dbo.[fn_SplitStr]('1,2,56,56',',')
    
    --4--
    select * from dbo.[fn_SplitStr]((select DodgeRaterID from Student where ID='06'),',')
    
    --5----
    declare @str varchar(50)
    set @str='11,22,3,4,5'
    declare @next int 
    set @next=1
    while @next<=dbo.Get_StrArrayLength(@str,',')
    begin
    print dbo.Get_StrArrayStrOfIndex(@str,',',@next)
    set @next=@next+1
    end
    
    --6---
    declare @str nvarchar(50)
    declare @ia int
    set @str='11'
    if ISNUMERIC(@str)=1
        begin
            select convert(int,@str)
        end
    else
        begin
            print 'err'
        end

     自定义函数A:

    USE [WebShowDBAlter]
    GO
    /****** Object:  UserDefinedFunction [dbo].[fn_SplitStr]    Script Date: 07/10/2020 17:24:25 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Function [dbo].[fn_SplitStr]
    (
       @SourceSql VARCHAR(max),     -- 字符串
       @StrSeprate VARCHAR(10)      -- 用于分解的字符
    )
    RETURNS @temp TABLE(result VARCHAR(100))
    AS
    BEGIN
        DECLARE @i INT
            SET @SourceSql = RTRIM(LTRIM(@SourceSql))
            SET @i=CHARINDEX(@StrSeprate,@SourceSql)
        WHILE @i>=1
        BEGIN
            INSERT @temp VALUES(LEFT(@SourceSql,@i-1))
            SET @SourceSql=SUBSTRING(@SourceSql,@i+1,LEN(@SourceSql)-@i)
            SET @i=CHARINDEX(@StrSeprate,@SourceSql)
        END
        IF @SourceSql<>''
            INSERT @temp values(@SourceSql)
        RETURN
    END

    自定义函数B:

    USE [WebShowDBAlter]
    GO
    /****** Object:  UserDefinedFunction [dbo].[Get_StrArrayLength]    Script Date: 07/10/2020 17:25:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER FUNCTION [dbo].[Get_StrArrayLength]--此函数为[标量值函数]
    (
    
    @str    NVARCHAR(4000), 
    @split  NVARCHAR(1000) 
    )
    RETURNS INT
    AS
    BEGIN
    DECLARE @location INT
    DECLARE @start INT
    DECLARE @length INT
    SET @str = LTRIM(RTRIM(@str))
    SET @location = CHARINDEX(@split, @str)
    SET @length = 1
    WHILE @location <> 0
    BEGIN
        SET @start = @location + 1
        SET @location = CHARINDEX(@split, @str, @start)
        SET @length = @length + 1
    END
    RETURN @length
    END

    自定义函数C:

    USE [WebShowDBAlter]
    GO
    /****** Object:  UserDefinedFunction [dbo].[Get_StrArrayStrOfIndex]    Script Date: 07/10/2020 17:25:57 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER FUNCTION [dbo].[Get_StrArrayStrOfIndex]
    (
    @str    NVARCHAR(4000), --要分割的字符串
    @split  NVARCHAR(1000), --分隔符号
    @index  INT --取第几个元素
    )
    
    RETURNS VARCHAR(1024)
    AS
    BEGIN
    DECLARE @location INT
    DECLARE @start INT
    DECLARE @next INT
    DECLARE @seed INT
    SET @str = LTRIM(RTRIM(@str))
    SET @start = 1
    SET @next = 1
    SET @seed = LEN(@split)
    SET @location = CHARINDEX(@split, @str)
    WHILE @location <> 0  AND @index > @next
    BEGIN
        SET @start = @location + @seed
        SET @location = CHARINDEX(@split, @str, @start)
        SET @next = @next + 1
    END
    IF @location = 0
        SELECT @location = LEN(@str) + 1 
    RETURN SUBSTRING(@str, @start, @location -@start)
    END
  • 相关阅读:
    bzoj 2442: [Usaco2011 Open]修剪草坪【单调栈】
    bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级【分层图+spfa】
    bzoj 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛【bfs】
    bzoj 1677: [Usaco2005 Jan]Sumsets 求和【dp】
    bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声【单调栈】
    洛谷 P4180 【模板】严格次小生成树[BJWC2010]【次小生成树】
    bzoj 1660: [Usaco2006 Nov]Bad Hair Day 乱发节【单调栈】
    bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路【dijskstra】
    bzoj 1631: [Usaco2007 Feb]Cow Party【spfa】
    bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛【dp+树状数组+hash】
  • 原文地址:https://www.cnblogs.com/exesoft/p/13280323.html
Copyright © 2011-2022 走看看