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