SQL:如何拆分varchar类型的列?

时间:2011-04-12 23:52:59

标签: sql sql-server database

我有一个名为'languages'的列,但它有以下类型的值:

english; polish; portuguese; 

..等等。

我想拆分,所以我可以将它插入另一个表中:

english
polish
portugese

继续。

我已经在Google搜索并找到了这个拆分功能:

CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
    WITH Pieces(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@sep, @s)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
      FROM Pieces
      WHERE stop > 0
    )
    SELECT pn,
      SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
    FROM Pieces
  )

我已经用它测试了它:

SELECT * FROM dbo.Split(' ', 'I hate bunnies')

所以我试着让这个适应我的情况:

INSERT INTO labbd11..language(language) SELECT s FROM dbo.Split(';', disciplinabd..movies.languages) 

然后它给了我这个例外:

The multi-part identifier "disciplinabd..movies.languages" could not be bound. Severity 16

有什么想法吗?

祝你好运, Valter Henrique。

1 个答案:

答案 0 :(得分:2)

使用CROSS APPLY

INSERT INTO labbd11..language(language)
SELECT DISTINCT s.s
FROM disciplinabd..movies m
CROSS APPLY dbo.Split(';', m.languages)  S

但是,如果我正确阅读了您的查询,您将从所有影片中分割语言,并将影片中的结果语言插入语言表(仅限1列)。希望这是一个测试查询,否则它根本没有商业价值。