sql server中常见字符串处理(待续)

常见的字符处理函数:

SELECT CHARINDEX('A','ABCDE')  --returns bigint 查找字符串2中字符串1的位置,若无则返回0
SELECT LEN('ABCDE')            --返回字符串的字符数
SELECT RIGHT('ABCDE',2)        --返回字符串从右开始指定数字的字符串个数
SELECT LEFT('ABCDE',2)         --返回字符串从左开始指定数字的字符串个数
SELECT REPLACE('ABCDE','A','|')--将字符串1中的字符串2替换为字符串3
SELECT SUBSTRING('ABCDE',2,3)  --返回字符串1中的某个开始位置的固定长度的字符
SELECT LTRIM(' ABCDE')         --返回删除了前空格之后的字符
SELECT RTRIM('ABCDE ')         --返回删除了后空格之后的字符

1. 按固定字符串分隔字符。

    如:字符 '12|1|4' ,需要按字符'|' 分隔成 12 1 4

USE [text]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/*创建一个表值函数,标量值函数与表值函数的区别:表值函数返回一个表,标量值函数返回值*/
CREATE FUNCTION [dbo].[fn_RowToColumn_ByID]
( 
	@GroupId nvarchar(max),
	@ColumnStr nvarchar(max),
	@Separator nvarchar(max)=','
) 
returns @TABLE table 
( 
	[id] int identity(1,1),
	[name] nvarchar(max), 
	[Value] nvarchar(max)
) 
as 
begin 
	declare @Index int
	declare @Entry nvarchar(max)
	set @Index = charindex(@Separator,@ColumnStr) 
	while (@Index>0) 
	begin 
		set @Entry=ltrim(rtrim(substring(@ColumnStr, 1, @Index-1))) 
		if @Entry<>''
		begin 
			insert into @TABLE([name],[Value]) Values(@GroupId,@Entry) 
		end 
		set @ColumnStr = substring(@ColumnStr, @Index + LEN(@Separator), len(@ColumnStr)) 
		set @Index = charindex(@Separator, @ColumnStr) 
	end 
	set @Entry=ltrim(rtrim(@ColumnStr)) 
		if @Entry<>''
		begin 
			insert into @TABLE([name],[Value]) Values(@GroupId,@Entry) 
		end 
	return
END

USE [text]
GO
SELECT * FROM [dbo].[fn_RowToColumn_ByID]('A','12|1|4','|') 

猜你喜欢

转载自tbc1993.iteye.com/blog/2288853