sqlserver中字符串切割函数总结

实例1
循环while一个个读取

 代码如下 复制代码

ALTER FUNCTION [dbo].[Split]
(   
    @Array VARCHAR(7000)
    ,@Split CHAR(1)
)
RETURNS @T TABLE(v VARCHAR(100))
AS
BEGIN
    WHILE(CHARINDEX(@Split,@Array)<>0)  
        BEGIN  
          INSERT @T VALUES(SUBSTRING(@Array,1,CHARINDEX(@Split,@Array)-1));
          SET @Array=STUFF(@Array,1,CHARINDEX(@Split,@Array),'');
        END  
      INSERT @T VALUES(@Array);
    RETURN;
END;

实例2

带,号的利用CHARINDEX处理

 代码如下 复制代码

 CREATE FUNCTION dbo.f_splitstr(
@str varchar(8000)
)RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))
AS
BEGIN
/* Function body */
DECLARE @pos int
SET @pos = CHARINDEX(',', @str)
WHILE @pos > 0
BEGIN
INSERT @r(value) VALUES(LEFT(@str, @pos - 1))
SELECT
@str = STUFF(@str, 1, @pos, ''),
@pos = CHARINDEX(',', @str)
END
IF @str > ''
INSERT @r(value) VALUES(@str)
RETURN

END

select * from f_splitstr('中,国,人')

 

实例3

按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

 代码如下 复制代码

CREATE function Get_StrArrayLength
(
  @str varchar(1024),  --要分割的字符串
  @split varchar(10)  --分隔符号
)
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
调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',')
返回值:4

 

实例4

按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

 代码如下 复制代码

CREATE function Get_StrArrayStrOfIndex
(
  @str varchar(1024),  --要分割的字符串
  @split varchar(10),  --分隔符号
  @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
 --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
 
  return substring(@str,@start,@location-@start)
end

调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)
返回值:9

SQLServer中的字符串截取函数

1.截取已知长度的函数

A.截取从字符串左边开始N个字符 Declare @S1 varchar(100)

 代码如下 复制代码
Select @S1='http://www.111cn.net'
Select Left(@S1,4)

------------------------------------
显示结果: http

B.截取从字符串右边开始N个字符(例如取字符www.111cn.net) Declare @S1 varchar(100)

 代码如下 复制代码
Select @S1='http://www.111cn.net'
Select right(@S1,11)

------------------------------------
显示结果: www.111cn.net

C.截取字符串中任意位置及长度(例如取字符www) Declare @S1 varchar(100)

 代码如下 复制代码
Select @S1='http://www.111cn.net'
Select SUBSTRING(@S1,8,3)

------------------------------------
显示结果: www.111cn.net

以上例子皆是已知截取位置及长度,下面介绍未知位置的例子

2.截取未知位置的函数

A.截取指定字符串后的字符串(例如截取http://后面的字符串)

方法一: Declare @S1 varchar(100)

 代码如下 复制代码
Select @S1='http://www.111cn.net'
Select Substring(@S1,CHARINDEX('www',@S1)+1,Len(@S1))
/*此处也可以这样写:Select Substring(@S1,CHARINDEX('//',@S1)+2,Len(@S1))*/

------------------------------------
显示结果: www.111cn.net

需要注意:CHARINDEX函数搜索字符串时,不区分大小写,因此CHARINDEX('www',@S1)也可以写成CHARINDEX('WWW',@S1)

 

方法二:(与方法一类似) Declare @S1 varchar(100)

 代码如下 复制代码
Select @S1='http://www.111cn.net'
Select Substring(@S1,PATINDEX('%www%',@S1)+1,Len(@S1))
--此处也可以这样写:Select Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1))

------------------------------------
显示结果: www.111cn.net 函数PATINDEX与CHARINDEX区别在于:前者可以参数一些参数,增加查询的功能

方法三: Declare @S1 varchar(100)

 代码如下 复制代码
Select @S1='http://www.111cn.net'
Select REPLACE(@S1,'http://','')

------------------------------------
显示结果: www.111cn.net

利用字符替换函数REPLACE,将除需要显示字符串外的字符替换为空

方法四:

 代码如下 复制代码
Declare @S1 varchar(100)
Select @S1='http://www.111cn.net'
Select STUFF(@S1,CHARINDEX('http://',@S1),Len('http://'),'')

本文章后面的实例就是上面函数的分解一,一个个stuff,substring等这些函数的组合就可以完美的实现字符串分切了哦。

时间: 2024-09-28 03:37:06

sqlserver中字符串切割函数总结的相关文章

C语言中字符串常用函数strcat与strcpy的用法介绍

以下是对C语言中字符串常用函数strcat与strcpy的使用方法进行了详细的分析介绍,需要的朋友可以参考下   strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include <string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串. 返回指向dest的指针.函数实现: 复制代

jquery字符串切割函数substring的用法

 本篇文章主要是对jquery字符串切割函数substring的用法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助    代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> jquery 字符串切割函数substring的用法说明 </TITLE> <META NAME="

SQLServer中利用NTILE函数对数据进行分组的一点使用

原文:SQLServer中利用NTILE函数对数据进行分组的一点使用 本文出处:http://www.cnblogs.com/wy123/p/6908377.html    NTILE函数可以按照指定的排序规则,对数据按照指定的组数(M个对象,按照某种排序分N个组)进行分组,可以展现出某一条数据被分配在哪个组中. 不仅可以单单利用这个特性,还可以借助该特实现更加有意思的功能. NTILE的基本使用 NTILE的作用是对数据进行整体上的分组,比如有60个学生,按照成绩分成"上中下"三个级

jquery 字符串切割函数substring的用法说明_jquery

复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE> jquery 字符串切割函数substring的用法说明 </TITLE><META NAME="Generator" CONTENT="EditPlus"><meta http-equ

JavaScript中字符串分割函数split用法实例_javascript技巧

本文实例讲述了JavaScript中字符串分割函数split用法.分享给大家供大家参考.具体如下: 先来看下面这段代码: <script type="text/javascript"> var str="How are you doing today?" document.write(str.split(" ") + "<br />") document.write(str.split("&q

c语言中字符串分割函数及实现方法_C 语言

1.问题引入 自己在写一个linux下的模拟执行指令的时候,遇到了输入"cat a.c",要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的问题,虽然最后调通了,不过确浪费了不少时间:后来作业交上去以后又仔细阅读了strtok函数,发现原来linux下已经改成strsep,所有在这里就写一下自己所走的过程. 2.自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a

SQLserver中字符串查找功能patindex和charindex的区别_MsSql

最近经常使用字符串查找功能. 包括 1.全匹配查找字符串 2.模糊查找字符串 CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置.PATINDEX 可使用通配符,而 CHARINDEX 不可以. 这两个函数都带有2个参数: 1 希望获取其位置的模式.使用 PATINDEX,模式是可以包含通配符的字面字符串.使用 CHARINDEX,模式是字面字符串(不能包含通配符). 2 字符串值表达式(通常为列名). 例如,查找模式"wonderful"在 titles 表中 n

c语言中字符串处理函数详解

C语言提供了丰富的字符串处理函数,例如字符串的输入.输出.合并.修改.比较.转换.复制.搜索等,使用这些现成的函数可大大减轻编程的负担. 用于输入输出的字符串函数,例如printf.puts.scanf.gets等,使用时应包含头文件stdio.h,使用其它字符串函数则应包含头文件string.h. 1.字符串长度函数strlen strlen 是 string length 的缩写,用来获得字符串的长度.所谓长度,就是包含多少个字符(不包括字符串结束标志 '\0').语法格式为: strlen

SQL server中字符串逗号分隔函数分享_MsSql

继SQl -Function创建函数数据库输出的结果用逗号隔开,在开发中也有许多以参数的形式传入带逗号字条串参数(数据大时不建议这样做) 例:查找姓名为"张三,李二" 的数据此时在数据库里就要对此参数做处理如图: 函数代码如下 CREATE FUNCTION [dbo].[fnSplitStr] ( @sText NVARCHAR(Max), @sDelim CHAR(1) ) RETURNS @retArray TABLE ( value VARCHAR(100) ) AS BEGI