Запятая разделения SQL 2005 разделенный столбец на разделителе

У меня была та же проблема (но, возможно, у меня была другая конфигурация конфигурации - хотя, казалось, она была простой ванилью)

Строки ниже показывают мою последнюю ошибку и мое «исправление». (Благодаря вышеупомянутым предложениям - Джошуа)

[user1@hoho6 RubymineProjects]$ svn checkout svn://localhost/home/user1/DummySVNrepo
svn: URL 'svn://localhost/home/user1/DummySVNrepo' doesn't exist

[user1@hoho6 RubymineProjects]$ svn checkout svn+ssh://localhost/home/user1/DummySVNrepo

The authenticity of host 'localhost (::1)' can't be established.RSA key fingerprint is 10:8d:10:04:00:02:b1...
Are you sure you want to continue connecting (yes/no)? yes
user1@localhost's password: 
user1@localhost's password: 
A    DummySVNrepo/test
A    DummySVNrepo/test/unit
... etc
6
задан Kyle Ballard 4 June 2009 в 15:48
поделиться

4 ответа

Да, это возможно с CROSS APPLY (SQL 2005 +):

with testdata (CommaColumn, ValueColumn1, ValueColumn2) as (
  select 'ABC,123', 1, 2 union all
  select 'XYZ, 789', 2, 3
  ) 
select 
  b.items as SplitValue
, a.ValueColumn1
, a.ValueColumn2
from testdata a
cross apply dbo.Split(a.CommaColumn,',') b

Примечания:

  1. Вы должны добавить индекс к набору результатов вашего разделенного столбца, чтобы он возвращал два columns, IndexNumber и Value.

  2. Встроенные реализации с числовой таблицей обычно быстрее, чем ваша процедурная версия здесь.

например:

create function [dbo].[Split] (@list nvarchar(max), @delimiter nchar(1) = N',')
returns table
as
return (
  select 
    Number = row_number() over (order by Number)
  , [Value] = ltrim(rtrim(convert(nvarchar(4000),
        substring(@list, Number
        , charindex(@delimiter, @list+@delimiter, Number)-Number
        )
    )))
  from dbo.Numbers
  where Number <= convert(int, len(@list))
    and substring(@delimiter + @list, Number, 1) = @delimiter
  )

Erland Sommarskog имеет окончательную страницу по этому поводу, я думаю: http : //www.sommarskog.se/arrays-in-sql-2005.html

13
ответ дан 8 December 2019 в 04:31
поделиться

Исправьте это правильно - сделайте этот столбец связанной таблицей. Из скалярных столбцов, разделенных запятыми, ничего хорошего не получится.

10
ответ дан 8 December 2019 в 04:31
поделиться

+1 к комментариям против CSV, но если вы должны это сделать, вы должны использовать CROSS APPLY или OUTER APPLY.

1
ответ дан 8 December 2019 в 04:31
поделиться

Вы можете попробовать что-то вроде:

SELECT s.Items AS SplitValue, ValueColumn1, ValueColumn2 
FROM MyTable, Split(CommaColumn,',') AS s
0
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: