我一直很好奇,这是否可能在SQL中
这是我的表
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中也是可能的。
谢谢!!!
答案 0 :(得分: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
结果:
答案 1 :(得分:0)
实际上还没有尝试过,但是可以使用T-SQL导入逗号分隔值文件
BULK
INSERT tableName
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ' ',
ROWTERMINATOR = '\n'
)
Here是样本的来源。
<强>更新强> 如果数据存储在数据库中,似乎没有比编写函数/存储过程来解析CSV更简单的解决方案,如this SO answer所示。