……
ALTER FUNCTION [dbo].[fn_idtotable](@ text text)
RETURNS @tbl TABLE (ID int)
AS
BEGIN
DECLARE @IDs varchar(1000)
DECLARE @S varchar(10)
DECLARE @B int, @E int, @L int, @N int, @K int
SET @L = DATALENGTH(@ text)
SET @B = 1
WHILE @B <= @L
BEGIN
IF @L - @B > 900 SET @N = 900 ELSE SET @N = @L - @B +1
WHILE NOT ( SUBSTRING(@ text, @B + @N - 1, 1) IN ( ',', ';', ' ', '(', ')', '' '', '"')) AND (@B + @N <= @L) SET @N = @N + 1
SET @IDs = SUBSTRING(@ text, @B, @N)
SET @B = @B + @N
SET @IDs = REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( LTRIM( RTRIM(@IDs)), ';', ','), ' ', ','), '(', ','), ')', ','), '' '', ','), '"', ',')
IF RIGHT(@IDs, 1) <> ',' SET @IDs = @IDs + ','
SET @K = CHARINDEX( ',', @IDs)
WHILE @K > 0
BEGIN
SET @S = LEFT(@IDs, @K - 1)
IF @S <> '' INSERT INTO @tbl VALUES(@S)
SET @IDs = SUBSTRING(@IDs, @K + 1, LEN(@IDs) - @K)
SET @K = CHARINDEX( ',', @IDs)
END
END
RETURN
END
……
1. SUBSTRING ( value_expression ,start_expression , length_expression )
返回从'start_expression'开始的'length_expression'个字符;
说明:
value_expression :是
character、
binary、
text、
ntext 或
image 表达式。
start_expression :指定返回字符的起始位置的整数或
bigint 表达式。如果
start_expression 小于 1,返回的表达式的起始位置为
value_expression 中指定的第一个字符。在这种情况下,返回的字符数是
start_expression 与
length_expression 的和与 0 之的大值。如果
start_expression 大于值表达式中的字符数,将返回一个零长度的表达式。
length_expression :是正整数或指定要返回的
value_expression 的字符数的
bigint 表达式。如果
length_expression 是负数,会生成错误并终止语句。如果
start_expression 与
length_expression 的和大于
value_expression 中的字符数,则返回起始位置为
start_expression 的整个值表达式。
2. DATALENGTH ( expression )
返回任何数据类型数据的长度
如果
expression 的数据类型为
varchar(max)、
nvarchar(max) 或
varbinary(max) 数据类型,则返回
bigint;否则返回
int。
NULL 的 DATALENGTH 的结果是 NULL。
3. REPLACE ( string_expression , string_pattern , string_replacement )
string_expression:要搜索的字符串表达式。
string_expression 可以是字符或二进制数据类型。
string_pattern:是要查找的子字符串。
string_pattern 可以是字符或二进制数据类型。
string_pattern 不能是空字符串 ('')。
string_replacement:替换字符串。
string_replacement 可以是字符或二进制数据类型。
4. CHARINDEX ( expression1 ,expression2 [ , start_location ] )
在
expression2 中搜索
expression1 并返回其起始位置(如果找到)。搜索的起始位置为
start_location。如果未指定
start_location,或者
start_location 为负数或 0,则将从
expression2 的开头开始搜索。