如何取字符串中的一部分?

解决方案 »

  1.   

    SUBSTRING
    返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。 语法
    SUBSTRING ( expression , start , length ) 参数
    expression是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。start是一个整数,指定子串的开始位置。length是一个整数,指定子串的长度(要返回的字符数或字节数)。
      

  2.   

    查看连击帮助相关字符串处理函数:Charindex()/Patindex()Substring()  Left()Right()
      

  3.   

    substring()
    ——任意位置取子串left()
    right()
    ——左右两端取子串ltrim()
    rtrim()
    ——截断空格,没有trim()。charindex()
    patindex()
    ——查子串在母串中的位置,没有返回0。区别:patindex支持通配符,charindex不支持。
      

  4.   

    Substring()  
    SQL中最常用的截取字符串的方法
      

  5.   

    Substring()  
    SQL Server 2000中联机帮助
      

  6.   

    其实每种语言的 字符串 函数都差不多,大致有这么几个1 取长度 len
    2 取子串 left right substring
    3 替换字串 replace
    4 取子串位置 charindex
    5 去掉前后空格 ltrim rtrim
      

  7.   

    substring
    charindex
    patindex
    stuff
    left
    right
      

  8.   

    Charindex()
    检测字符位置
    Patindex() 
    可模糊查询的监测字符位置
    Substring()     
    字符串截取
    Left() 
    从左开始截取
    Right()
    从右开始截取
    具体的用法可以到百度或其他网站查询。
      

  9.   

    SUBSTRING 
    返回字符、binary、text   或   image   表达式的一部分。有关可与该函数一起使用的有效   Microsoft®   SQL   Server™   数据类型的更多信息,请参见数据类型。   语法 
    SUBSTRING   (   expression   ,   start   ,   length   )   参数 
    expression 是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。 start 是一个整数,指定子串的开始位置。 length 是一个整数,指定子串的长度(要返回的字符数或字节数)。 
      

  10.   

    最常用的
    Charindex()/Patindex() 
    Substring()     
    Left() 
    Right()
      

  11.   

    substring
    charindex
    patindex
    stuff
    left
    right
      

  12.   

    substring
    charindex
    patindex
    stuff
    left
    right
      

  13.   

    Substring()     Left() Right()
      

  14.   

    Charindex() 
    检测字符位置 
    Patindex() 
    可模糊查询的监测字符位置 
    Substring()    
    字符串截取 
    Left() 
    从左开始截取 
    Right() 
    从右开始截取 
      

  15.   

    使用substring(取字符串)函数
    substring函数用于返回字符串、二进制字符串或文本串的一部分,还可以将此函数解释为从指定的位置取得指定个数的字符。语法:substring (expression, start, length)参数说明:l          expression:字符串表达式、可以是二进制字符串、text、image、列或包含列的表达式。l          start:一个整数,指定子串的开始位置。l          length:一个整数,指定子串的长度(要返回的字符数或字节数)。示例:下面使用substring函数取得“商品入库日期”。本例将使用substring函数,在“商品编号”字段中从第6位开始取字符串,共取4位,例如在“S20031211002”字符串中,从第6位开始取,共取4位,则返回结果为“1211”。
      

  16.   


    1、select left(字段名,长度) from 表名2、select substring(字段名,1,长度) from 表名注意substring函数是从1开始的
      

  17.   

    substring
    charindex
    patindex
    stuff
    left
    right
      

  18.   

    substring() 
    ——任意位置取子串 left() 
    right() 
    ——左右两端取子串 ltrim() 
    rtrim() 
    ——截断空格,没有trim()。 charindex() 
    patindex() 
    ——查子串在母串中的位置,没有返回0。区别:patindex支持通配符,charindex不支持。 
      

  19.   

    --各种字符串分函数if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_splitSTR]
    GO--3.2.1 循环截取法
    CREATE FUNCTION f_splitSTR(
    @s   varchar(8000),   --待分拆的字符串
    @split varchar(10)     --数据分隔符
    )RETURNS @re TABLE(col varchar(100))
    AS
    BEGIN
    DECLARE @splitlen int
    SET @splitlen=LEN(@split+'a')-2
    WHILE CHARINDEX(@split,@s)>0
    BEGIN
    INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
    SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
    END
    INSERT @re VALUES(@s)
    RETURN
    END
    GO
    /*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_splitSTR]
    GO--3.2.3.1 使用临时性分拆辅助表法
    CREATE FUNCTION f_splitSTR(
    @s   varchar(8000),  --待分拆的字符串
    @split varchar(10)     --数据分隔符
    )RETURNS @re TABLE(col varchar(100))
    AS
    BEGIN
    --创建分拆处理的辅助表(用户定义函数中只能操作表变量)
    DECLARE @t TABLE(ID int IDENTITY,b bit)
    INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
    FROM @t
    WHERE ID<=LEN(@s+'a') 
    AND CHARINDEX(@split,@split+@s,ID)=ID
    RETURN
    END
    GO/*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_splitSTR]
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1)
    drop table [dbo].[tb_splitSTR]
    GO--3.2.3.2 使用永久性分拆辅助表法
    --字符串分拆辅助表
    SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
    FROM syscolumns a,syscolumns b
    GO--字符串分拆处理函数
    CREATE FUNCTION f_splitSTR(
    @s     varchar(8000),  --待分拆的字符串
    @split  varchar(10)     --数据分隔符
    )RETURNS TABLE
    AS
    RETURN(
    SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
    FROM tb_splitSTR
    WHERE ID<=LEN(@s+'a') 
    AND CHARINDEX(@split,@split+@s,ID)=ID)
    GO
    /*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_splitSTR]
    GO--3.2.5 将数据项按数字与非数字再次拆份
    CREATE FUNCTION f_splitSTR(
    @s   varchar(8000),    --待分拆的字符串
    @split varchar(10)     --数据分隔符
    )RETURNS @re TABLE(No varchar(100),Value varchar(20))
    AS
    BEGIN
    --创建分拆处理的辅助表(用户定义函数中只能操作表变量)
    DECLARE @t TABLE(ID int IDENTITY,b bit)
    INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re 
    SELECT No=REVERSE(STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,'')),
    Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
    FROM(
    SELECT col=REVERSE(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID))
    FROM @t
    WHERE ID<=LEN(@s+'a') 
    AND CHARINDEX(@split,@split+@s,ID)=ID)a
    RETURN
    END
    GO
    /*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_splitSTR]
    GO--3.2.6 分拆短信数据
    CREATE FUNCTION f_splitSTR(@s varchar(8000))
    RETURNS @re TABLE(split varchar(10),value varchar(100))
    AS
    BEGIN
    DECLARE @splits TABLE(split varchar(10),splitlen as LEN(split))
    INSERT @splits(split)
    SELECT 'AC' UNION ALL
    SELECT 'BC' UNION ALL
    SELECT 'CC' UNION ALL
    SELECT 'DC'
    DECLARE @pos1 int,@pos2 int,@split varchar(10),@splitlen int
    SELECT TOP 1 
    @pos1=1,@split=split,@splitlen=splitlen
    FROM @splits
    WHERE @s LIKE split+'%'
    WHILE @pos1>0
    BEGIN
    SELECT TOP 1
    @pos2=CHARINDEX(split,@s,@splitlen+1)
    FROM @splits
    WHERE CHARINDEX(split,@s,@splitlen+1)>0
    ORDER BY CHARINDEX(split,@s,@splitlen+1)
    IF @@ROWCOUNT=0
    BEGIN
    INSERT @re VALUES(@split,STUFF(@s,1,@splitlen,''))
    RETURN
    END
    ELSE
    BEGIN
    INSERT @re VALUES(@split,SUBSTRING(@s,@splitlen+1,@pos2-@splitlen-1))
    SELECT TOP 1 
    @pos1=1,@split=split,@splitlen=splitlen,@s=STUFF(@s,1,@pos2-1,'')
    FROM @splits
    WHERE STUFF(@s,1,@pos2-1,'') LIKE split+'%'
    END
    END
    RETURN
    END
    GO
      

  20.   

    初学者,用过这几个:
    Substring()     
    --substring(cost_subj_code,6,30)   
    --cost_subj_code(字段名称);6 从第六位开始;30  到第30位结束,下面两个的语法一样。
    Left() Right()