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 @[email protected]+1 
set @location=charindex(@split,@str,@start) 
set @[email protected]+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 @st[email protected][email protected] 
set @location=charindex(@split,@str,@start) 
set @[email protected]+1 
end 
if @location =0 select @location =len(@str)+1 
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。

return substring(@str,@start,@[email protected]) 
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 @[email protected]+1 
end

调用结果: 




5

时间: 2024-11-08 20:05:33

SQL对字符串数组的处理的相关文章

sql把字符数组转换成表 :把字符串1,2,3变成表里的行数据

需求:把字符串1,2,3变成表里的行数据 方法:用自定义函数实现 /* 获取字符串数组的 Table */ if exists (select 1 from sysobjects where id = object_id('Get_StrArrayStrOfTable' )) drop Function Get_StrArrayStrOfTable go CREATE function Get_StrArrayStrOfTable( @SourceSql varchar (max), @StrS

sql server 模拟数组【转】

sql server 模拟数组 --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(@sp

如何让SQL按ORDERBY数组顺序排列

ids = "1,2,3,4,5,6"; sql="select bookid,bookname from books where bookid in (" + ids + ") order by charindex(bookid,"+ids+")" CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置 bookid 是要到ids中寻找所在的位置 下面的是网上查的资料 order by常用的使用方

字符串数组中两个字符的最短距离

[leetcode] https://leetcode.com/problems/shortest-word-distance/ For example,Assume that words = ["practice", "makes", "perfect", "coding", "makes"]. Given word1 = "coding", word2 = "practic

Java求字符串数组交集 并集 差集 去重复并集

//系统方法 package com; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Test { public static void main(String[] args) { List list1 =new ArrayList(); list1.add("1111"); list1.add("2222"); list1.add

关于清空字符串数组

嗯,由于要多次输出某字符串数组,比如str[100], 所以,每次输出完之后需要对其进行重置╮( ̄▽ ̄)╭ 可以使用如下的函数: menset(str, 0, 100); 嗯,一共三个参数,很容易看明白哇 <( ̄︶ ̄)/ 度娘上是这么评价的: memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法!╰( ̄▽ ̄)╯

利用快慢下标操作字符串数组

1.去除掉多余的空格: e.g. Before:   Life___is__short___I___use___python_'\0'(下划线为空格) After:  Life_is_short_I_use_python'\0' (去除掉多余的空格) 去掉空格比较简单,我们可以通过逐个判断字符,如果有连续的空格就使数组左移直到只剩一个空格,可是这么做效率十分低下; 前面学习过利用快慢下标的方法实现快排思想,这里也可以采用类似的方法 : 对于删除后的数组,长度将减少或者不变,则指向删除后数组的下标

Android中资源文件中的字符串数组string-array简单用法

在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的strings.xml文件里,或是其他自定义的xml中都可以,以下操作方法相同. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sports"> <item>足球<

本程序找出字符串数组 String[] arr = {“welcome”, “china”, “hi”, “congratulation”, “great”} 中的长度最大的元素,并打印输出。

/** * Homework14 * * @Description:本程序找出字符串数组 String[] arr = {"welcome", "china", "hi", * "congratulation", "great"} 中的长度最大的元素,并打印输出. * StringDemo01 * * @author  * * email: [email protected] 2017年4月18日下午6:3