SQL Like中的逗号分隔符

SQL Like中的逗号分隔符

  在与数据库交互的过程中,我们经常需要把一串ID组成的字符串当作参数传给存储过程获取数据。很多时候我们希望把这个字符串转成集合以方便用于in操作。 有两种方式可以方便地把这个以某种符号分隔的ID字符串转成临时表。

 

方式一:通过charindex和substring。 


代码


create function func_splitstring
(@str nvarchar(max),@split varchar(10))
returns @t Table (c1 varchar(100))
as
begin
declare @i int
declare @s int
set @i=1
set @s=1
while(@i>0)
begin
set @i=charindex(@split,@str,@s)
if(@i>0)
begin
insert @t(c1) values(substring(@str,@s,@i-@s))
end
else begin
insert @t(c1) values(substring(@str,@s,len(@str)-@s+1))
end
set @s = @i + 1
end
return
end

执行:select * from  dbo.func_splitstring('1,2,3,4,5,6', ',')

结果:

 

 

方式二:通过XQuery(需要SQL Server 2005以上版本)。


代码


create function func_splitid
(@str varchar(max),@split varchar(10))
RETURNS @t Table (c1 int)
AS
BEGIN
DECLARE @x XML
SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>')
INSERT INTO @t SELECT x.item.value('@id[1]', 'INT') FROM @x.nodes('//items/item') AS x(item)
RETURN
END

执行:select * from  dbo.func_splitid('1,2,3,4,5,6', ',')

结果:

 

其他写法:

 


代码

alter FUNCTION [dbo].[func_split](@str nvarchar(4000),@separtor varchar(10))     

   returns @temp table([row] [int] IDENTITY(1,1) NOT NULL,value nvarchar(4000))     

   as      

 begin    

    declare @i int    

    set  @str=rtrim(ltrim(@str))     

    set  @i=charindex(@separtor,@str)     

   while   @i>=1     

     begin    

      insert   @temp   values(left(@str,@i-1))     

      set  @str=substring(@str,@i+1,len(@str)-@i)     

      set  @i=charindex(@separtor,@str)     

     end    

     if @str<>''      

     insert @temp values(@str)     

     return      

 end 

转自:http://www.cnblogs.com/jhxk/articles/1802633.html

时间: 2024-08-01 11:13:39

SQL Like中的逗号分隔符的相关文章

在MySQL字段中使用逗号分隔符的方法分享_Mysql

被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如下面这个表结构所代表的content与tag这两个对象 复制代码 代码如下: mysql> SELECT * FROM content; +----+------+| id | tags | +----+------+| 1 | 1,2 | | 2 | 2,3 | +----+------+ 2 rows in set (0.01 sec) mysql>

sqlserver中去除字符串中连续的分隔符的sql语句_MsSql

以下测试用于去除任何字符串中连线的分隔符 复制代码 代码如下: --去除字符串中连续的分隔符 declare @str nvarchar(200) declare @split nvarchar(200),@times int set @str='中 国1 2 34 55 5 6 7 7';--字符 set @split=' '; --分隔符 select @times=(len(@str)-len(replace(@str,@split+@split,'')))/2 while @times>

sqlserver中去除字符串中连续的分隔符的sql语句

以下测试用于去除任何字符串中连线的分隔符 复制代码 代码如下: --去除字符串中连续的分隔符 declare @str nvarchar(200) declare @split nvarchar(200),@times int set @str='中 国1 2 34 55 5 6 7 7';--字符 set @split=' '; --分隔符 select @times=(len(@str)-len(replace(@str,@split+@split,'')))/2 while @times>

在SQL Server中谨慎导入导出大容量数据

在数据库初始化过程中,管理员需要面对的一个现实问题就是如何把大容量的数据导入到数据库系统 中.在SQL Server数据库中提供了一些大容量数据导入导出的工具供数据库管理员实用.如管理员可以通 过bcp实用工具,实现大容量导出数据和大容量导入数据并生成格式化文件.如可以利用bulk insert语句 将大容量数据直接从数据文件导入数据库表或者未分区的视图中去等等. 虽然在SQL Server数据库中提供了这些实用工具.不过管理员在实际工作中,仍然需要谨慎对待这项 工作.具体的来说,在大容量数据导

SQL Server中数据行批量插入脚本的存储实现_MsSql

无意中看到朋友写的一篇文章"将表里的数据批量生成INSERT语句的存储过程的实现".我仔细看文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这篇博文和基于公司数据行批量脚本的存储的缺点,这次改写和增强该存储的功能.    本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: IF OBJEC

SQL Server中数据行批量插入脚本的存储实现

无意中看到朋友写的一篇文章"将表里的数据批量生成INSERT语句的存储过程的实现".我仔细看文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这篇博文和基于公司数据行批量脚本的存储的缺点,这次改写和增强该存储的功能. 本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: IF OBJECT_I

VB应用:在TEXTBOX中使用逗号区分数据

数据 ---------VB应用:在TEXTBOX中使用逗号区分数据------------ 主要作用是在查询数据库时,要求同一字段的多条件的查询,SQL语句的生成,下面代码是利用一个TextAfter的数组存放用逗号分隔开的数据. Dim intTextLen, i, k As Integer Dim TextBefore, TextAfter(100) As String intTextLen = Len(TextBox1.Text) k = 1 TextBefore = TextBox1.

如何将SQL Server中的表变成txt文件

方法-:用BCP命令 bcp 实用工具 bcp 实用工具在 Microsoft SQL Server 2000 实例和数据文件之间以用户指定的格式复数据. 语法 bcp {[[database_name.][owner].]{table_name | view_name} | "query"} {in | out | queryout | format} data_file [-m max_errors] [-f format_file] [-e err_file] [-F first

SQL Sever中使用SQL语句实现把重复行数据合并为一行并用逗号分隔

 一.定义表变量 代码如下: DECLARE @T1 table ( UserID int ,  UserName nvarchar(50), CityName nvarchar(50) );   insert into @T1 (UserID,UserName,CityName) values (1,'a','上海') insert into @T1 (UserID,UserName,CityName) values (2,'b','北京') insert into @T1 (UserID,U