Sql中将字符串按分割符拆分

创建函数
 1 SET ANSI_NULLS ON
 2 GO
 3
 4 SET QUOTED_IDENTIFIER ON
 5 GO
 6
 7 Create FUNCTION [dbo].[F_Split]
 8  (
 9      @SplitString nvarchar(max),  --源字符串
10      @Separator nvarchar(10)=‘ ‘  --分隔符号,默认为空格
11  )
12  RETURNS @SplitStringsTable TABLE  --输出的数据表
13  (
14      [id] int identity(1,1),
15      [value] nvarchar(max)
16  )
17  AS
18  BEGIN
19      DECLARE @CurrentIndex int;
20      DECLARE @NextIndex int;
21      DECLARE @ReturnText nvarchar(max);
22
23      SELECT @CurrentIndex=1;
24      WHILE(@CurrentIndex<=len(@SplitString))
25          BEGIN
26              SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
27              IF(@NextIndex=0 OR @NextIndex IS NULL)
28                  SELECT @NextIndex=len(@SplitString)+1;
29                  SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
30                  INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
31                  SELECT @CurrentIndex=@NextIndex+1;
32              END
33      RETURN;
34  END
35 GO

  使用:

select * from F_Split(‘1,2,3,4,5‘,‘,‘)

  

select * from tb_SysUser u where u.ID in (select value from dbo.F_Split(‘1,2,3,4‘,‘,‘))

  

时间: 2024-08-04 16:07:04

Sql中将字符串按分割符拆分的相关文章

把字符串按照分割符分解成不同的部分

select regexp_substr('A,B,C,D,E', '[^,]+', 1, level, 'i') as str from dual connect by level <= length('A,B,C,D,E') - length(regexp_replace('A,B,C,D,E', ',', '')) + 1;把字符串按照分割符分解成不同的部分

ORACLE 将一个字符串按照分割符分成三部分

如下例子: select substr('LL$$BOAT$$he很帅', 1, instr('LL$$BOAT$$he很帅', '$$', 1, 1) - 1), substr('LL$$BOAT$$he很帅', instr('LL$$BOAT$$he很帅', '$$', 1, 1) + 2, instr('LL$$BOAT$$he很帅', '$$', 1, 2) - 2 - instr('LL$$BOAT$$he很帅', '$$', 1, 1)), substr('LL$$BOAT$$he很

目录地址字符串的分割

[代码] 1 //字符串中,如果没有转义字符出现单个'\'会报错,所以目录只能这么写 2 String path = "C:\\Program Files\\Java\\jdk1.8.0_152\\bin"; 3 //字符串中分割符为'\\',那么在正则匹配中就是'\\\\' 4 String[] dirLists = path.split("\\\\"); 5 //遍历字符串数组 6 for (int i = 0; i < dirLists.length;

【SQL】sql版Split函数。用于拆分字符串为单列表格

原文:[SQL]sql版Split函数.用于拆分字符串为单列表格 功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移除空格子串和重复项.市面上类似的函数不算少,但大多都是在循环中对原串进行改动,我感觉这样不好,虽然不知道sql的字符串是不是像.net的一样具有不可变性,但感觉尽量不要去动原串最好,万一sql的字串也不可变,那变一次就要产生一份,尤其是每圈循环都在变,内存消耗让人心疼,所以才有重新造个轮子的想

SQL Server Split函数 支持分割符多字节

SQL Server Split函数 --说明: --支持分割符多字节 --使用方法 --Select * FROM DBO.F_SQLSERVER_SPLIT('1203401230105045','0') --select * from DBO.F_SQLSERVER_SPLIT('abc1234a12348991234','1234') --Select * from DBO.F_SQLSERVER_SPLIT('ABC',',') ALTER FUNCTION [dbo].[F_SQLS

字符串分割函数--拆分成多行(转)

--字符串拆分成行 declare @str varchar(8000)  set @str = 'a1,b1,c2,d1,e3,f5'  --,换成 union all select set @str = 'select  name='''+replace(@str,',',''' union all select ''')+''''  exec(@str) /*name  ----  a1 b1 c2 d1 e3 f5 */ --字符串分割函数--拆分成多行 create function

Sql中将datetime转换成字符串的方法(CONVERT())

语法格式:CONVERT (<data_ type>[ length ], <expression> [, style]) style的含义:style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式:一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到. SQL Serve

SQL SERVER 分割符转列

--分割符转列select ParsedData.* from new_systemparameterbase mt cross apply ( select str = mt.New_value + ',,' ) f1 cross apply ( select p1 = charindex( ',', str ) ) ap1 cross apply ( select p2 = charindex( ',', str, p1 + 1 ) ) ap2 cross apply ( select p3

字符串的分割操作(strtok,split)

一:strtok C/C++:char *strtok(char s[], const char *delim); s 代表需要分割的字符串,delim代表分割的标志,参数都为比选!返回指向分割部分的指针,如果没有分割成功就返回NULL. 一个简单的例子: void main() { char *str = "jscese test strtok"; char *delim = " "; char *pstr = NULL; pstr = strtok(str, d