zoukankan      html  css  js  c++  java
  • sql 语句 截取字符串的两种方案

    方案一:使用内置的函数

    SUBSTRINGCHARINDEXLEN三个内置函数

    理论:

    SUBSTRING语法
     
    SUBSTRING ( value_expression , start_expression , length_expression )
    参数
    value_expression:数据库字段
    start_expression:指定返回字符的起始位置
    length_expression:要截取的长度
    返回类型

    如果 expression 是其中一个受支持的字符数据类型,则返回字符数据。

    CHARINDEX语法
     
    CHARINDEX ( expression1 ,expression2 [ , start_location ] ) 
    参数
    expression1:包含要查找的序列的字符表达式。expression1 最大长度限制为 8000 个字符。
    expression2:要搜索的字符表达式。
    start_location:表示搜索起始位置的整数或 bigint 表达式。如果未指定 start_location,或者 start_location 为负数或 0,则将从 expression2 的开头开始搜索。
    返回类型

    如果 expression2 的数据类型为 varchar(max)nvarchar(max)varbinary(max),则为 bigint,否则为 int

    LEN语法
     
    LEN ( string_expression )
    参数
    string_expression:要求值的字符串表达式。string_expression 可以是常量、变量,也可以是字符列或二进制数据列。
    返回类型

    如果 expression 的数据类型为 varchar(max)nvarchar(max)varbinary(max),则为 bigint;否则为 int

    实例:

    SELECT SUBSTRING(MatchMessage,CHARINDEX(',', MatchMessage)+1,LEN(MatchMessage)-CHARINDEX(',', MatchMessage)) FROM dbo.Temp_ZiXun 

    方案二:创建自定义函数

    理论:

    CREATE function [dbo].[SplitString]
    (
        @Input nvarchar(max), --input string to be separated
        @Separator nvarchar(max)=',', --a string that delimit the substrings in the input string
        @RemoveEmptyEntries bit=1 --the return value does not include array elements that contain an empty string
    )
    returns @TABLE table
    (
        [Id] int identity(1,1),
        [Value] nvarchar(max)
    )
    as
    begin
        declare @Index int, @Entry nvarchar(max)
        set @Index = charindex(@Separator,@Input)
    
        while (@Index>0)
        begin
            set @Entry=ltrim(rtrim(substring(@Input, 1, @Index-1)))
           
            if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
                begin
                    insert into @TABLE([Value]) Values(@Entry)
                end
    
            set @Input = substring(@Input, @Index+datalength(@Separator)/2, len(@Input))
            set @Index = charindex(@Separator, @Input)
        end
       
        set @Entry=ltrim(rtrim(@Input))
        if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
            begin
                insert into @TABLE([Value]) Values(@Entry)
            end
    
        return
    end

    实例:

    DECLARE @imgColleciton VARCHAR(500),@BaseID INT,@value VARCHAR(5000)
    SELECT @imgColleciton=BaseImage FROM dbo.life_fc WHERE BaseID=44 
    SELECT value FROM [dbo].[SplitString](@imgColleciton,'|',0)
  • 相关阅读:
    头脑王者 艺术,电影,体育,时尚,动漫
    头脑王者 音乐
    头脑王者 地理
    头脑王者 历史,军事
    头脑王者 文学
    Jenkins project
    sql server drop login failed
    devenv.exe 编译Solution
    Jenkins
    头脑王者
  • 原文地址:https://www.cnblogs.com/sunxi/p/4500021.html
Copyright © 2011-2022 走看看