SQL 字符截取
如题所示 在写存储过程当中常用到字符的截取与同事总结了一下帖上来
Code
declare @Text nvarchar(20),@Sign nvarchar(20),@Content nvarchar(20),@StartIndex int,@FindIndex int ,@result nvarchar(30)
--初始化一些变量
set @Text = '14,20,3,4'
set @Sign = ','
SET @StartIndex = 1 --T-SQL中字符串的查找位置是从开始的
SET @FindIndex=0
set @result =''
--开始循环查找字符串逗号
WHILE(@StartIndex <= LEN(@Text))
BEGIN
--查找字符串函数CHARINDEX 第一个参数是要找的字符串
-- 第二个参数是在哪里查找这个字符串
-- 第三个参数是开始查找的位置
--返回值是找到字符串的位置
SELECT @FindIndex = CHARINDEX(@Sign,@Text,@StartIndex)
--print @FindIndex
--判断有没找到没找到返回
IF(@FindIndex =0 OR @FindIndex IS NULL)
BEGIN
--如果没有找到者表示找完了
SET @FindIndex = LEN(@Text)+1
END
--截取字符串函数SUBSTRING 第一个参数是要截取的字符串
-- 第二个参数是开始的位置
-- 第三个参数是截取的长度
--@FindIndex-@StartIndex 表示找的的位置-开始找的位置=要截取的长度
--LTRIM 和RTRIM 是去除字符串左边和右边的空格函数
SET @Content = LTRIM(RTRIM(SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex)))
if(@StartIndex = LEN(@Text))
begin
set @result = @result + @Content
end
else
begin
set @result = @result + @Content+','
end
--print @Content
--初始化下次查找的位置
SET @StartIndex = @FindIndex+1
print @result
end
select @result
declare @Text nvarchar(20),@Sign nvarchar(20),@Content nvarchar(20),@StartIndex int,@FindIndex int ,@result nvarchar(30)
--初始化一些变量
set @Text = '14,20,3,4'
set @Sign = ','
SET @StartIndex = 1 --T-SQL中字符串的查找位置是从开始的
SET @FindIndex=0
set @result =''
--开始循环查找字符串逗号
WHILE(@StartIndex <= LEN(@Text))
BEGIN
--查找字符串函数CHARINDEX 第一个参数是要找的字符串
-- 第二个参数是在哪里查找这个字符串
-- 第三个参数是开始查找的位置
--返回值是找到字符串的位置
SELECT @FindIndex = CHARINDEX(@Sign,@Text,@StartIndex)
--print @FindIndex
--判断有没找到没找到返回
IF(@FindIndex =0 OR @FindIndex IS NULL)
BEGIN
--如果没有找到者表示找完了
SET @FindIndex = LEN(@Text)+1
END
--截取字符串函数SUBSTRING 第一个参数是要截取的字符串
-- 第二个参数是开始的位置
-- 第三个参数是截取的长度
--@FindIndex-@StartIndex 表示找的的位置-开始找的位置=要截取的长度
--LTRIM 和RTRIM 是去除字符串左边和右边的空格函数
SET @Content = LTRIM(RTRIM(SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex)))
if(@StartIndex = LEN(@Text))
begin
set @result = @result + @Content
end
else
begin
set @result = @result + @Content+','
end
--print @Content
--初始化下次查找的位置
SET @StartIndex = @FindIndex+1
print @result
end
select @result
如果以上对你有帮助或你有更好的解决方法请留言告之,分享共同进步.. 你的留言也就是动力