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
5
//-------------------------------------------------------------------------------------------------------------------------
select f1,f2,f3,left(A,charindex('_',A)-1)
from 表名
order by left(A,charindex('_',A)-1)
分享到:
相关推荐
### SQL2000 字符串分割方法解析 在处理大量数据时,经常需要对包含逗号分隔值(CSV)格式的字符串进行拆分,以便于进一步的数据处理与分析。本文将详细介绍如何使用SQL Server 2000中的T-SQL语言实现字符串的拆分...
### SQL字符串分割技术详解 在数据库管理与查询中,经常遇到需要将一个包含多个值的字符串字段分割成多个单独字段的情况。这种需求在处理CSV数据、解析复合字段或执行复杂的数据清洗任务时尤为常见。本文将详细介绍...
在SQL Server中,经常需要对字符串进行操作,例如分割、合并等。本文将详细介绍如何使用SQL Server中的存储过程来实现字符串的拆分,并通过一个具体的例子来展示整个过程。 #### SQL字符串拆分背景介绍 在实际业务...
《SQL IN查询字符串分割工具详解》 在数据库操作中,SQL查询是我们不可或缺的工具,而IN查询作为一种常用的操作方式,其灵活性和效率受到广大开发者的青睐。然而,当IN查询的参数数量庞大时,手动拼接字符串就显得...
### PostgreSQL数字结尾字符串分割排序详解 #### 功能概述 本文档旨在详细介绍如何通过自定义函数在PostgreSQL数据库中实现一种特殊的排序方式:对于以数字结尾的字符串,首先将其分为两部分,一部分为非数字字符串...
### PL/SQL字符串分割实现方法详解 为了实现字符串分割的功能,我们可以通过以下步骤来构建PL/SQL函数: 1. **定义输入参数**: - `p_input_string`:原始字符串。 - `p_delimiter`:分隔符。 2. **创建游标或...
// 使用多种可能的分隔符(如逗号、换行符、分号和带空格的星号)分割字符串 string[] bb = aa.Split(new string[] { "\r\n", ",", ";", "* " }, StringSplitOptions.RemoveEmptyEntries); // 遍历分割后的字符...
### ABAP常用字符串操作知识点详解 #### 一、字符串连接 在ABAP中,字符串连接是一种常见的操作方式,用于将两个或多个字符串合并成一个新的字符串。实现字符串连接的方法主要是通过`CONCATENATE`语句。 **语法...
而在使用`substring_index`函数时,它根据分隔符来分割字符串并返回子串: ```sql SUBSTRING_INDEX(str, delim, count) ``` `str`是原始字符串,`delim`是分隔符,`count`是一个正数或负数,指示返回的子串是在...
字符串专题资料中,可能包含以下内容:字符串的基础概念、常用操作方法详解、各种编程语言中的字符串处理差异、正则表达式教程、编码解码原理及实践、字符串在不同场景的应用案例等。通过深入学习这些内容,开发者...
它不仅可以按需分割字符串,还能在不同位置和匹配次数下工作,并支持大小写敏感/不敏感的模式匹配。在实际应用中,根据具体需求调整参数,可以高效地处理各种复杂的字符串处理任务。了解并熟练掌握`REGEXP_SUBSTR`,...
[dbo].[Get_ArrayStr] 是一个自定义函数,其功能是从给定的字符串 `@str` 中,依据分隔符 `@split` 分割字符串,并返回第 `@index` 个分割后的子串。 #### 参数说明 - **@str**:类型为 `varchar(1024)`,表示输入...
`:构建 SQL 插入语句,其中 `stradd` 是经过去重处理后的字符串。 #### 去重函数实现 接下来是去重函数的具体实现: ```csharp /// /// 去重复 /// ///一个字符串数组 ///<returns></returns> public ArrayList...
这是因为where in时,SQL Server会将参数当做一个字符串来处理,而不是将其分割成多个参数。 那么,如何实现正确的参数化where in查询呢?一种方法是使用CHARINDEX函数,例如: ```sql select * from Users(nolock)...
Split函数是ASP中一个非常实用的内置函数,主要用于根据指定的分隔符来分割字符串,并返回一个包含子字符串的数组。本文将通过实例详细探讨Split函数的用法,以及如何在ASP环境中应用该函数。 ### Split函数的定义...
本文详细介绍了如何在 Oracle 数据库中实现字符串分隔的功能,通过自定义函数 `splitstr` 实现了根据用户定义的分隔符来分割字符串的目标。这种方法不仅灵活,而且易于维护和扩展,非常适合于处理各种复杂的字符串...
3. **`strtok`**: 分割字符串为数组。 4. **`strrchr`**: 从右向左查找字符串首次出现的位置。 5. **`strrev`**: 反转字符串。 6. **`strstr`**: 查找子字符串并返回剩余部分。 7. **`strtolower`**: 将字符串转换为...
1. **字符串分割**:将十六进制字符串按照字符进行分割。 2. **字符替换**:对于十六进制中的字母部分(如A-F),将其替换为相应的十进制数值。 3. **数学计算**:利用幂运算和乘法来计算每个字符对应的十进制值,...
在这个例子中,`LargeTable`的`Name`列包含用冒号分隔的值,`Split`是一个自定义的表值函数,它将字符串分割成多个行。CROSS APPLY将`Split`函数应用到`LargeTable`的每一行,并只保留那些在分割后`a`字段非空的行。...
- **`StringTokenizer` 类**:用于将字符串分解成子串,特别适用于解析以特定分隔符分割的文本数据。 - **正则表达式**:强大的文本搜索和替换工具,用于模式匹配、文本替换等复杂操作,是处理字符串的高级技术。 #...