……
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 或 p_w_picpath 表达式。
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 的开头开始搜索。