常见的字符处理函数:
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','|')