1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| CREATE FUNCTION Fn_ParseTilde (@_string varchar(max))
RETURNS @return TABLE
(
sub_string_1 varchar(16)
, sub_string_2 varchar(16)
, sub_string_3 varchar(16)
, sub_string_4 varchar(16)
, sub_string_5 varchar(16)
, sub_string_6 varchar(16)
)
WITH SCHEMABINDING
AS
BEGIN
DECLARE @pos1 tinyint
, @pos2 tinyint
, @pos3 tinyint
, @pos4 tinyint
, @pos5 tinyint
, @pos6 tinyint
SELECT @pos1 = CHARINDEX('~', @_string)
, @pos2 = CASE @pos1 WHEN 0 THEN NULL ELSE CHARINDEX('~', @_string, @pos1 + 1) END
, @pos3 = CASE @pos2 WHEN 0 THEN NULL ELSE CHARINDEX('~', @_string, @pos2 + 1) END
, @pos4 = CASE @pos3 WHEN 0 THEN NULL ELSE CHARINDEX('~', @_string, @pos3 + 1) END
, @pos5 = CASE @pos4 WHEN 0 THEN NULL ELSE CHARINDEX('~', @_string, @pos4 + 1) END
, @pos6 = CASE @pos5 WHEN 0 THEN NULL ELSE CHARINDEX('~', @_string, @pos5 + 1) END
INSERT @return
SELECT SUBSTRING(@_string, 1, CASE WHEN @pos1 = 0 THEN LEN(@_string)ELSE @pos1 - 1 END)
, SUBSTRING(@_string, @pos1 + 1, CASE WHEN @pos2 = 0 THEN LEN(@_string) ELSE @pos2 - @pos1 - 1 END)
, SUBSTRING(@_string, @pos2 + 1, CASE WHEN @pos3 = 0 THEN LEN(@_string) ELSE @pos3 - @pos2 - 1 END)
, SUBSTRING(@_string, @pos3 + 1, CASE WHEN @pos4 = 0 THEN LEN(@_string) ELSE @pos4 - @pos3 - 1 END)
, SUBSTRING(@_string, @pos4 + 1, CASE WHEN @pos5 = 0 THEN LEN(@_string) ELSE @pos5 - @pos4 - 1 END)
, SUBSTRING(@_string, @pos5 + 1, CASE WHEN @pos6 = 0 THEN LEN(@_string) ELSE @pos6 - @pos5 - 1 END)
RETURN
END |
Partager