Как разбить поле с разделителями пробелами на строки в SQL Server? - PullRequest
3 голосов
/ 19 января 2010

Я нашел эту функцию , которая возвращает три строки для следующего запроса:

select * from dbo.split('1 2 3',' ') 

Однако мне нужно использовать значения из поля вместо '1 2 3'.

Я пытался:

select * from dbo.split(select top 1 myfield from mytable,' ')

Но он не может сказать неправильный синтаксис.

Не нужно использовать функцию выше, поэтому не стесняйтесь рекомендовать другую функциюдругой способ пойти об этом.Чтобы уточнить, мне нужно только проанализировать значения из одной строки одного поля.

Ответы [ 5 ]

3 голосов
/ 19 января 2010

Вам необходимо применить функцию split (myfield) к каждой строке в mytable. Если функция разбиения является табличной функцией, правильный ответ - оператор APPLY :

Оператор APPLY позволяет вам вызвать табличную функцию для каждая строка возвращается внешней таблицей выражение запроса.

Таким образом, ответ должен быть:

select *
from mytable 
cross apply dbo.split(myfield, ' ');

Пример:

create table mytable (myfield varchar(10));
insert into mytable (myfield) values ('1 2 3');
go

create function split (@list varchar(max), @delimiter char(1))
returns @shards table (value varchar(8000))
with schemabinding
as
begin
  declare @i int;
  set @i = 0;
  while @i <= len(@list)
  begin
    declare @n int;
    set @n = charindex(@delimiter, @list, @i);
    if 0 = @n
    begin
       set @n = len(@list);
    end
    insert into @shards (value) 
      values (substring(@list, @i, @n-@i+1));
    set @i = @n+1;
  end
  return;
end
go

select * 
from mytable  
cross apply dbo.split(myfield, ' ');
2 голосов
/ 19 января 2010

Вы пробовали

SELECT dbo.split(myfield, ' ') AS x FROM mytable
1 голос
/ 02 сентября 2010
EXEC SP_DBCMPTLEVEL 'YOUR_DB_NAME',90;

Следует устранить проблему несовместимого кода Ремуса.Я только что посмотрел на свою собственную базу данных, и она была установлена ​​на уровне '80', что означает, что он поддерживает <= SQL 2000. После применения процедуры, описанной выше, код работает и отлично работает.out wtf опирается на SQL2000 и ломается в SQL2005 ... А-а-а!</p>

Эта ссылка MSDN поможет вам определить, будут ли негативно затронуты ваши слои fn / usp / app: http://msdn.microsoft.com/en-us/library/bb510680.aspx

0 голосов
/ 26 ноября 2011

Попробуйте

select * from dbo.split((select top 1 myfield from mytable),' ')
0 голосов
/ 19 января 2010

поместите UDF вокруг вашей колонки, пример

SELECT dbo.split(myfield, ' ')  as SplitValue
FROM mytable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...