SQL分割字符串详解

T-SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理字符串。
一,用临时表作为数组。

create function f_split(@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
    begin 

      while(charindex(@split,@c)<>0)
        begin
          insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
          set @c = stuff(@c,1,charindex(@split,@c),'')
        end
      insert @t(col) values (@c)
      return
    end
go 

select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',') 

drop function f_split

   col 
--------------------     
dfkd   
dfdkdf   
dfdkf   
dffjk   

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

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
 
三、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

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
 
三、结合上边两个函数,象数组一样遍历字符串中的元素
 

declare @str varchar(50)
set @str='1,2,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

调用结果:

1
2
3
4

//-------------------------------------------------------------------------------------------------------------------------

select f1,f2,f3,left(A,charindex('_',A)-1)
from 表名
order by left(A,charindex('_',A)-1)
时间: 2024-11-01 09:00:22

SQL分割字符串详解的相关文章

sql 分割字符串(1/2)

本文章来讲一下关于sql 分割字符串哦,如何进行sql字符串拆分操作了,在mmsql server中要分割就会要用到存储过程哦,其实的sql一般时实现不了的哈. 用临时表作为数组 create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) valu

SQL SERVER 数据类型详解补充2

数据类型 类型 描 述 bit 整型 bit 数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或Fa lse .On 或Off int 整型 int 数据类型可以存储从- 231(-2147483648)到231 (2147483 647)之间的整数.存储到数据库的几乎所有数值型的数据都可以用这种数据类型.这种数据类型在数据库里占用4个字节 smallint 整型 smallint 数据类型可以存储从- 215(-32768)到215

ASP.NET2.0连接SQL Server数据库详解

asp.net|server|数据|数据库|详解 本文将详细介绍如何使用Connection对象连接数据库.对 本文将详细介绍如何使用Connection对象连接数据库.对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库.这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法. Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection.

Mysql之SQL Mode用法详解_Mysql

一.Mysql SQL Mode简介 通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式.这样,应用程序就能对服务器操作进行量身定制以满足自己的需求.这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查.这样,就能在众多不同的环境下.与其他数据库服务器一起更容易地使用MySQL.可以使用"--sql-mode="modes""选项,通过启动mysqld来设置默认的SQL模式.而从MySQL 4.

SQL SERVER 数据类型详解补充2_MsSql

数据类型 类型 描 述 bit 整型 bit 数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或Fa lse .On 或Off int 整型 int 数据类型可以存储从- 231(-2147483648)到231 (2147483 647)之间的整数.存储到数据库的几乎所有数值型的数据都可以用这种数据类型.这种数据类型在数据库里占用4个字节 smallint 整型 smallint 数据类型可以存储从- 215(-32768)到215

ADO.Net连接SQL Azure数据库详解

ADO.Net连接SQL Azure数据库教程详解 在.Net环境下,连接数据库最常用的方法是使用ADO.Net.在SQL Azure环境下,ADO.Net 可以继续使用,这样对于.Net环境下的开发者来说,不用学习新的知识与技能就可以很容易 的连接到SQL Azure数据库上,这也符合微软所一直在宣传的云计算战略,减少了单独学习云 应用开发的成本. 要使用ADO.Net连接SQL Azure,有两种方法,一种是通过SQL Azure的门户管理页面提供 的连接字符串来连接;另一种方法是在程序里硬

sql 数据库事务详解

sql 数据库教程事务详解 作为大型的企业级数据库,SQL Server2000对事务提供了很好的支持.我们可以使用SQL语句来定义.提交以及回滚一个事务. ??如下所示的SQL代码定义了一个事务,并且命名为"MyTransaction"(限于篇幅,本文并不讨论如何编写SQL语言程序,请读者自行参考相关书籍): DECLARE @TranName VARCHAR(20) SELECT @TranName = 'MyTransaction' BEGIN TRANSACTION @Tran

SQL SERVER 数据类型详解

server|数据|数据类型|详解 数据类型 类型 描             述 bit 整型 bit 数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或Fa lse .On 或Off int 整型 int 数据类型可以存储从- 231(-2147483648)到231 (2147483 647)之间的整数.存储到数据库的几乎所有数值型的数据都可以用这种数据类型.这种数据类型在数据库里占用4个字节 smallint 整型 small

常见sql注入原理详解!

1.首先我们创建一个mysqli的链接 /**数据库配置*/ $config = ['hostname'=>"localhost", 'port'=>"3306", 'username'=>"root",'password'=>'','db'=>'sql']; /**接收参数*/ $id = $_GET['id']?$_GET['id']:""; if(empty($id)){ echo &quo