ВСТАВИТЬ В ТАБЛИЦУ из списка varchar, разделенного запятыми

Возможно, я не вижу леса за деревьями, но я застрял, поэтому вот вопрос:

Как я могу импортировать / вставить список разделенные запятыми значения varchar в таблицу? Я не имею в виду что-то вроде этого:

  • '12345678,87654321,11223344' но это:
  • '12345678', '87654321', '11223344'

У меня есть Split -функция, но в данном случае она кажется бесполезной, не так ли?

Вот простой пример (имитация SQL), чтобы показать, что я имею в виду:

Create Table #IMEIS(
    imei varchar(15)
)
INTO INTO #IMEIS(imei)
    SELECT * FROM ('012251000362843', '012251001084784', '012251001168744', '012273007269862', '012291000080227', '012291000383084', '012291000448515')
SELECT * from #IMEIS
DROP TABLE #IMEIS;

Заранее благодарю.

27
задан Tim Schmelter 15 June 2011 в 08:01
поделиться

2 ответа

Примерно так должно работать:

INSERT INTO #IMEIS (imei) VALUES ('val1'), ('val2'), ...

ОБНОВЛЕНИЕ:

Очевидно, этот синтаксис доступен только начиная с SQL Server 2008.

47
ответ дан 28 November 2019 в 04:31
поделиться

Sql Server не имеет (насколько мне известно) встроенной функции Split. Функция разделения в целом на всех платформах будет иметь разделенное запятыми строковое значение, которое будет разбито на отдельные строки. На сервере sql основная цель или необходимая функция Split - преобразовать строковое значение, разделенное запятыми (‘abc, cde, fgh’), во временную таблицу, в которой каждая строка является строкой.

Приведенная ниже функция Split представляет собой табличную функцию, которая поможет нам разбить строку через запятую (или любое другое значение разделителя) на отдельную строку.

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))       
returns @temptable TABLE (items varchar(8000))       
as       
begin       
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return       
end  

выберите топ 10 * из dbo.split («Ченнаи, Бангалор, Мумбаи», «,»)

полный список можно найти по ссылке http: / /www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

10
ответ дан 28 November 2019 в 04:31
поделиться
Другие вопросы по тегам:

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