我想根据列将列拆分为4列。
例如:列值包括'City_Name','State',Zipcode','Country'
我想将其拆分为4个不同的列,例如City_Name
,State
,Zipcode
,Country
。
如何使用T-SQL执行此操作?
答案 0 :(得分:7)
假设您在该列中始终有3个逗号,则可以使用PARSENAME函数
create table #test(Col varchar(100))
insert #test values('City_Name,State,Zipcode,Country')
insert #test values('New York City,NJ,10028,United States')
select parsename(replace(Col,',','.'),4) as City_Name,
parsename(replace(Col,',','.'),3) as State,
parsename(replace(Col,',','.'),2) as Zipcode,
parsename(replace(Col,',','.'),1) as Country
from #test
输出
City_Name State Zipcode Country
New York City NJ 10028 United States
答案 1 :(得分:0)
如果原始列中有一些明显的分隔符,则可以编写用户定义的函数,也可以使用某些内联正则表达式将数据提取到4列。你如何做到这一点取决于:
您可能希望让我们查看一些示例数据以获取更多信息。
答案 2 :(得分:0)
第1步:在数据库表中创建四个新列。由于您要向现有表添加新列,因此它们必须具有默认值(例如,空字符串)
第2步:运行更新查询,根据旧列更新四个新列。使用SQL字符串函数执行此操作(可以在引用中查找它们,例如SUBSTRING)
第3步:删除旧列
答案 3 :(得分:0)
创建一个包含所需字段的新表。遍历原始表中的记录,并用分隔符拆分该列中的值。对于拆分,您可以使用charindex,substring和其他字符串操作函数。您可以在SP或函数中编写此逻辑。
答案 4 :(得分:0)
使用您的示例字符串进行测试:
CREATE FUNCTION fn_PARM (@Parm nvarchar(2000))
RETURNS @TParm TABLE (City_Name nvarchar(100),State nvarchar(100),Zipcode nvarchar(100),Country nvarchar(100))
AS
BEGIN
DECLARE @City_Name nvarchar(100)
,@State nvarchar(100)
,@Zipcode nvarchar(100)
,@Country nvarchar(100)
,@CommaPosition1 tinyint
,@CommaPosition2 tinyint
SELECT @CommaPosition1 = charindex(',',@Parm)
IF (@CommaPosition1>0)
BEGIN
SELECT @City_Name = ltrim(rtrim(SUBSTRING(@Parm,1,@CommaPosition1 - 1)))
SELECT @CommaPosition2 = @CommaPosition1 + 1
SELECT @CommaPosition1 = charindex(',',@Parm,@CommaPosition2)
IF (@CommaPosition1>0)
BEGIN
SELECT @State = ltrim(rtrim(SUBSTRING(@Parm,@CommaPosition2 + 1,@CommaPosition1 - (@CommaPosition2 + 1))))
SELECT @CommaPosition2 = @CommaPosition1 + 1
SELECT @CommaPosition1 = charindex(',',@Parm,@CommaPosition2)
IF (@CommaPosition1>0)
BEGIN
SELECT @Zipcode = ltrim(rtrim(SUBSTRING(@Parm,@CommaPosition2 + 1,@CommaPosition1 - (@CommaPosition2 + 1))))
SELECT @Country = ltrim(rtrim(SUBSTRING(@Parm,@CommaPosition1 + 1,LEN(@Parm))))
END
END
END
INSERT INTO @TParm (City_Name, State, Zipcode,Country)
VALUES (@City_Name, @State, @Zipcode, @Country)
RETURN
END
GO
简单用法:
select * from fn_PARM('Delhi , Delhi ,34567 ,IND' )
要在查询中使用,请参阅 This MSDN article ,了解如何使用APPLY。