CREATE TABLE A(id INT,country VARCHAR(100)) INSERT A SELECT 1,'中国;日本;韩国' UNION ALL SELECT 2,'美国;意大利;法国' UNION ALL SELECT 3,'德国' SELECT * FROM A-- 建立一个辅助的临时表就可以了 SELECT TOP 8000 id = identity(int,1,1) INTO # FROM syscolumns a, syscolumns b SELECT A.ID, COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX(';', A.COUNTRY + ';', B.ID) - B.ID) FROM A, # B WHERE SUBSTRING(';' + a.COUNTRY, B.id, 1) = ';' ORDER BY 1,2 GO DROP TABLE A,#
我是这样处理的,但是无论如何,就是不行:ALTER FUNCTION [dbo].[GetSplitStringEx] ( -- Add the parameters for the function here @str ntext, @spli nvarchar(10) ) RETURNS @re TABLE ( -- Add the column definitions for the TABLE variable here SplitString ntext ) AS BEGIN -- Fill the table variable with the rows for your result set DECLARE @splen int --分隔字符串长度 SELECT @splen = LEN(@spli) --得到分隔字符串的长度 DECLARE @i int --内部变量,用于记录分隔符在字符串中的位置 DECLARE @lastpos int --内部变量,用于记录上一个分隔符号所在的位置
SET @i = 1 SET @lastpos = 0 WHILE (1=1) --如果字符串中存在分隔符 BEGIN SELECT @i = CHARINDEX(@spli, @str, @lastpos+@splen) --得到下一个分隔符号所在的位置 IF(@i > 0) BEGIN INSERT INTO @re VALUES(SUBSTRING(@str, @lastpos+@splen, @i-@splen-@lastpos)) --将两个分隔符号之间的内容插入到表中 END ELSE BEGIN BREAK; END SET @lastpos = @i END RETURN END
INSERT A
SELECT 1,'中国;日本;韩国' UNION ALL
SELECT 2,'美国;意大利;法国' UNION ALL
SELECT 3,'德国'
SELECT * FROM A-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b
SELECT
A.ID,
COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX(';', A.COUNTRY + ';', B.ID) - B.ID)
FROM A, # B
WHERE SUBSTRING(';' + a.COUNTRY, B.id, 1) = ';'
ORDER BY 1,2
GO
DROP TABLE A,#
(
-- Add the parameters for the function here
@str ntext,
@spli nvarchar(10)
)
RETURNS
@re TABLE
(
-- Add the column definitions for the TABLE variable here
SplitString ntext
)
AS
BEGIN
-- Fill the table variable with the rows for your result set DECLARE @splen int --分隔字符串长度
SELECT @splen = LEN(@spli) --得到分隔字符串的长度 DECLARE @i int --内部变量,用于记录分隔符在字符串中的位置
DECLARE @lastpos int --内部变量,用于记录上一个分隔符号所在的位置
SET @i = 1
SET @lastpos = 0 WHILE (1=1) --如果字符串中存在分隔符
BEGIN
SELECT @i = CHARINDEX(@spli, @str, @lastpos+@splen) --得到下一个分隔符号所在的位置 IF(@i > 0)
BEGIN
INSERT INTO @re
VALUES(SUBSTRING(@str, @lastpos+@splen, @i-@splen-@lastpos)) --将两个分隔符号之间的内容插入到表中
END
ELSE
BEGIN
BREAK;
END SET @lastpos = @i
END RETURN
END