SQL: Как разбить столбец типа varchar? - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть таблица, в которой есть столбец с именем '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

Есть идеи?

С уважением, Вальтер Энрике.

1 Ответ

2 голосов
/ 13 апреля 2011

Используйте CROSS APPLY

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

Но если я правильно прочитал ваш запрос, вы разделяете языки из ALL фильмов и вставляете результирующие языки из фильма в таблицу языков (только 1 столбец). Надеюсь, что это тестовый запрос, в противном случае он не имеет никаких деловых достоинств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...