首先我们需要明确一下题目的意思。根据指定内容拆分数据,指的是将某一列中的数据按照指定的内容进行分割,然后将结果分别存储到新的列中。例如,我们想要将“姓名-年龄-性别”的格式拆分成“姓名”、“年龄”、“性别”三列数据,就可以使用下面的方法来实现。
下面是具体实现步骤:
1. 使用CHARINDEX函数获取分隔符位置
在SQL Server中,我们可以使用CHARINDEX函数来查找指定字符串在另一字符串中出现的位置。这个函数的基本语法如下:
CHARINDEX(substring, string [, start_position])
其中,substring表示要查找的子字符串;string表示要查找的字符串;start_position表示开始查找的位置,可选参数。当start_position值为0或1时,表示从字符串的第一个字符开始查找。
对于本题,我们可以使用该函数来获取“姓名-年龄-性别”字符串中分隔符“-”所在的位置。我们假设原表中的该列名为“Original”,则我们可以使用以下代码来获取该位置:
SELECT
CHARINDEX('-', Original) AS HyphenPos
FROM
TableName
2. 使用SUBSTRING函数分别提取各个部分的数据
在获取到分隔符位置之后,我们就可以使用SUBSTRING函数来分别提取各个部分的数据了。这个函数的语法如下:
SUBSTRING(string, start_position, length)
其中,string表示要操作的字符串;start_position表示要开始提取的位置;length表示要提取的长度。
例如,若我们要从“姓名-年龄-性别”这个字符串中,提取出“姓名”这个部分,我们可以使用以下代码:
SELECT
SUBSTRING(Original, 1, CHARINDEX('-', Original) - 1) AS Name
FROM
TableName
上述代码中,我们使用了CHARINDEX函数来获取“-”的位置,然后使用SUBSTRING函数将“姓名”提取出来。
3. 将各个部分的数据存储到新的列中
在分别提取出各个部分的数据之后,我们就可以将其分别存储到新的列中了。假设我们要将“姓名-年龄-性别”这个字符串拆分成“姓名”、“年龄”、“性别”三个部分,并依次存储到“Name”、“Age”和“Gender”三个新的列中,我们需要使用如下代码来实现:
UPDATE TableName SET
Name = SUBSTRING(Original, 1, CHARINDEX('-', Original) - 1),
Age = SUBSTRING(Original, CHARINDEX('-', Original) + 1, CHARINDEX('-', Original, CHARINDEX('-', Original) + 1) - CHARINDEX('-', Original) - 1),
Gender = SUBSTRING(Original, CHARINDEX('-', Original, CHARINDEX('-', Original) + 1) + 1, LEN(Original) - CHARINDEX('-', Original, CHARINDEX('-', Original) + 1))
上述代码中,第一句是UPDATE语句,用来插入新的列,第二句是赋值的语句。
其中,我们使用了两次CHARINDEX函数来获取“-”分隔符的位置,并分别使用了SUBSTRING函数来提取出各个部分的数据。
例如,对于“姓名-年龄-性别”这个字符串,上述代码的第一行会将“姓名”这个部分插入到名为“Name”的新列中,第二行会将“年龄”这个部分插入到名为“Age”的新列中,第三行会将“性别”这个部分插入到名为“Gender”的新列中。
以上就是本题的完整攻略,以下附上示例说明:
示例一:
若原表中的列名为“PersonalInfo”,其存在如下数据:
PersonalInfo
------------
Tom-25-Male
Jerry-30-Female
则使用以下代码,可以将“PersonalInfo”列按照“-”进行拆分,并将结果插入到名为“Name”、“Age”和“Gender”的新列中:
ALTER TABLE TableName
ADD Name VARCHAR(50), Age INT, Gender VARCHAR(50)
UPDATE TableName SET
Name = SUBSTRING(PersonalInfo, 1, CHARINDEX('-', PersonalInfo) - 1),
Age = CAST(SUBSTRING(PersonalInfo, CHARINDEX('-', PersonalInfo) + 1, CHARINDEX('-', PersonalInfo, CHARINDEX('-', PersonalInfo) + 1) - CHARINDEX('-', PersonalInfo) - 1) AS INT),
Gender = SUBSTRING(PersonalInfo, CHARINDEX('-', PersonalInfo, CHARINDEX('-', PersonalInfo) + 1) + 1, LEN(PersonalInfo) - CHARINDEX('-', PersonalInfo, CHARINDEX('-', PersonalInfo) + 1))
执行完上述代码后,新表的结构和数据如下:
Name | Age | Gender
-------|-----|--------
Tom | 25 | Male
Jerry | 30 | Female
示例二:
若原表中的列名为“Address”,其存在如下数据:
Address
--------------------
No.123 Road, Beijing
No.321 Road, Shanghai
则使用以下代码可以将“Address”列按照“,”进行拆分,并将结果插入到名为“Street”、“City”和“Country”的新列中:
ALTER TABLE TableName
ADD Street VARCHAR(100), City VARCHAR(50), Country VARCHAR(50)
UPDATE TableName SET
Street = SUBSTRING(Address, 1, CHARINDEX(',', Address) - 1),
City = LTRIM(RTRIM(SUBSTRING(Address, CHARINDEX(',', Address) + 1, CHARINDEX(',', Address, CHARINDEX(',', Address) + 1) - CHARINDEX(',', Address) - 1))),
Country = LTRIM(RTRIM(SUBSTRING(Address, CHARINDEX(',', Address, CHARINDEX(',', Address) + 1) + 1, LEN(Address) - CHARINDEX(',', Address, CHARINDEX(',', Address) + 1))))
执行完上述代码后,新表的结构和数据如下:
Street | City | Country
-------------|-----------|----------
No.123 Road | Beijing |
No.321 Road | Shanghai |
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Sql Server数据把列根据指定内容拆分数据的方法实例 - Python技术站