比方說,我有一個表3行 - 每行包含一個CSV,我可以保證會有永遠只能是1個逗號排在SQL CSV中的成列
xxx,111
yyy,222
zzz,333
我怎麼能選擇表,使結果表中都有2列如下:
xxx 111
yyy 222
zzz 333
我已經試過SELECT split(item,',') FROM A
但很明顯,這是不行的。 是否有一種不使用遊標的功能方式?
我正在使用SQL Server 2008
比方說,我有一個表3行 - 每行包含一個CSV,我可以保證會有永遠只能是1個逗號排在SQL CSV中的成列
xxx,111
yyy,222
zzz,333
我怎麼能選擇表,使結果表中都有2列如下:
xxx 111
yyy 222
zzz 333
我已經試過SELECT split(item,',') FROM A
但很明顯,這是不行的。 是否有一種不使用遊標的功能方式?
我正在使用SQL Server 2008
有沒有簡單的功能方式,如split()雖然。有沒有使用遊標的方法:
SELECT
SUBSTRING(item, 1,
CHARINDEX(',', item) - 1
) AS Field1,
SUBSTRING(item, CHARINDEX(',', item) + 1,
LEN(item) - CHARINDEX(',', item)
) AS Field2
FROM A
看看這個帖子Split Function in Sql Server to break Comma-Separated Strings into Table。我認爲這會解決你的問題。
這是一個不同的問題。 OP已經有了一個單列的表格,並且希望將它變成一個有兩列的表格(每個值被分成兩個)。你鏈接到的帖子是關於將一個* single *值分成一個* column *的值,這也不是一個不常見的問題,只是它完全不同。 – 2012-01-16 12:48:03
我正在使用此存儲過程將.csv文件加載到現有表中,它可能會對您有所幫助。它會將與模式匹配的文件夾中的所有csv文件加載到表中。你必須通過它
這不是100%萬無一失百分比(例如避免文件名或空間過於冗長),但可以根據需要進行更改。
-- ============================================================
-- Author: László Tenki
-- Create date: 2011-06-20
-- Description: Data integration script for loading Excel files
-- using the standard MS data connectivity pack
-- Microsoft.ACE.OLEDB.12.0
-- ============================================================
ALTER procedure [di].[genericCSVImporter]
-- parameters for the stored procedure
@folder varchar(500), @fileNamePattern varchar(100),
@table varchar(128), @moveProcessed bit,
@fieldDelimiter varchar(1), @firstRow int, @formatFile nvarchar(25)
as
begin
declare @query varchar(1000)
declare @filename varchar(200)
declare @formatFilePath varchar(200)
declare @dir table ([name] varchar(200))
set @query ='master.dbo.xp_cmdshell "dir ' + @folder + '\' + @fileNamePattern + ' /b"'
set @query = replace(@query, '\\', '\')
insert into @dir exec (@query)
delete from @dir where name is NULL
declare myc cursor for select [name] from @dir where [name]<> 'File Not Found' order by [name]
open myc
fetch next from myc into @filename
while @@fetch_status = 0
begin
set @filename = @folder + '\' + @filename
set @filename = replace(@filename, '\\', '\')
set @formatFilePath = replace(@folder + '\' + @formatFile, '\\', '\')
set @query ='BULK INSERT ' + @table + ' FROM ''' + @filename +
''' WITH (FIELDTERMINATOR = ''' + @fieldDelimiter + ''', ROWTERMINATOR = ''\n'', ' +
'FIRSTROW = ' + cast(@firstRow as nvarchar(10)) + ', CODEPAGE = ''ACP'', ' +
'FORMATFILE=''' + @formatFilePath + ''')'
print @query
exec (@query)
if @moveProcessed=1
begin
set @query = 'master.dbo.xp_cmdshell "copy /Y ' + @filename + ' ' + @folder +'\done"'
exec (@query)
set @query = 'master.dbo.xp_cmdshell "del /Q ' + @filename + '"'
exec (@query)
end
fetch next from myc into @filename
end
close myc
deallocate myc
end
在上面的查詢中,第一列(Field1)將附加一個逗號。 Plz將第一部分替換爲SUBSTRING(item,1,CHARINDEX(',',item)-1)AS Field1。 – 2012-01-16 09:24:52
感謝敏銳的目光Kumar – cctan 2012-01-16 09:31:42