0

我一直好奇的分離,是否這是可能在SQL正則表達式在SQL Server中使用空格

這裏是我的表

Text 
----- 
India 01/01/2001 Mumbai 
SriLanka 01/01/2001 Colombo 
USA 01/01/2001 Chicago 

從這些創建表的單獨的列(用空格隔開),如

Country  Date  Location 
-----  -----  -------- 
India  01/01/2001 Mumbai 
SriLanka 01/01/2001 Colombo 
USA   01/01/2001 Chicago 

只有在這裏構造我的東西是我們在JAVA中做的正則表達式。

在SQL中也是可能的。

謝謝!

回答

1

你可以用這樣的表值函數分割列:

CREATE FUNCTION [dbo].[fnParseFields] (@str NVARCHAR(max), @delimiter NCHAR) 
RETURNS @retval TABLE(Country NVARCHAR(max), [Date] NVARCHAR(max), Location NVARCHAR(max)) 
AS 
BEGIN 
    declare @f1 varchar(max), @f2 varchar(max), @f3 varchar(max); 
    set @str=ltrim(@str); 

    -- Field 1 
    set @f1=(left(@str,CHARINDEX(@delimiter,@str,1)-1)); 
    SET @str=RIGHT(@str,LEN(@str)-CHARINDEX(@delimiter,@str,1)); 

    -- Field 2 
    set @f2=(left(@str,CHARINDEX(@delimiter,@str,1)-1)); 

    -- Field 3 
    SET @f3=RIGHT(@str,LEN(@str)-CHARINDEX(@delimiter,@str,1)); 
    insert into @retval values (@f1,@f2,@f3); 

    RETURN; 
END 

GO 

create table myText (sometext varchar(80)); 

insert into myText values 
('India 01/01/2001 Mumbai') 
, ('SriLanka 01/01/2001 Colombo') 
, ('USA 01/01/2001 Chicago'); 
go 

select f.* from myText 
cross apply [dbo].[fnParseFields](sometext,' ') f 
go 

結果:

enter image description here

+0

謝謝!完美.... – user1141584 2012-03-14 20:05:06

+0

歡迎您:) – 2012-03-14 20:30:27

0

實際上並沒有嘗試過,但它可以導入使用T-SQL

BULK 
INSERT tableName 
FROM 'c:\csvtest.txt' 
WITH 
(
FIELDTERMINATOR = ' ', 
ROWTERMINATOR = '\n' 
) 

Here是示例源逗號分隔值文件。

更新 如果數據存儲在數據庫中,似乎並不比寫一個函數/存儲過程來解析CSV簡單的解決方案,像this SO answer建議。

+0

嗯,我的源和目的都是在數據庫中兩個表。對不起忘了提及! – user1141584 2012-03-13 15:32:41

+0

更新了我的答案。希望能幫助到你。 – 2012-03-13 15:45:36

+0

想知道你是否可以幫助這個http://stackoverflow.com/questions/9687622/sql-server-exporting-data-from-a-view – 2012-03-13 16:41:47