Sql server 2008 SQL Server 2008中的拆分文本
我有一个列,它的值如下Sql server 2008 SQL Server 2008中的拆分文本,sql-server-2008,tsql,Sql Server 2008,Tsql,我有一个列,它的值如下 "BEAAL - Aalter - Belgium - EMEA" 我想创建一个表,将其拆分为多个列 位置=比亚尔-阿尔特 国家=比利时 地区=欧洲、中东和非洲 所以我的桌子应该是这样的 'ID' 'Text' 'Location' 'Country' 'Region' '1 ' 'BEAAL - Aalter' 'BEAAL - Aalter' 'B
"BEAAL - Aalter - Belgium - EMEA"
我想创建一个表,将其拆分为多个列
- 位置=比亚尔-阿尔特
- 国家=比利时
- 地区=欧洲、中东和非洲
'ID' 'Text' 'Location' 'Country' 'Region'
'1 ' 'BEAAL - Aalter' 'BEAAL - Aalter' 'Belgium' 'EMEA'
如何在SQL Server 2008中实现这一点?我在表中有大约1000个条目要以这种方式拆分。此脚本使用您可以在中找到的SplitString函数的稍微修改版本生成您想要的内容。这一切都归功于我们的努力 修改的SplitString函数:
CREATE FUNCTION [dbo].[SplitStrings](@List NVARCHAR(MAX))
RETURNS TABLE
AS
RETURN ( SELECT Item=LTRIM(RTRIM(Item)),Id FROM
( SELECT Item = x.i.value('(./text())[1]', 'nvarchar(max)'),Id=x.i.value('for $i in . return count(../*[.<<$i])+1','INT')
FROM ( SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List, '-', '</i><i>') + '</i>').query('.')
) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
WHERE Item IS NOT NULL
);
结果是:
╔════╦═════════════════╦═════════╦════════╗
║ id ║ Location ║ Country ║ Region ║
╠════╬═════════════════╬═════════╬════════╣
║ 1 ║ BEAAL - Aalter ║ Belgium ║ EMEA ║
║ 2 ║ YYYY - Gent ║ Belgium ║ XXXX ║
║ 3 ║ ZZZZZ - Brussel ║ Belgium ║ WWWWW ║
╚════╩═════════════════╩═════════╩════════╝
搜索“sql server 2008 split text”时没有可用内容?如果结构是固定的(即第一部分和第二部分始终是位置,第三部分始终是国家,第四部分始终是区域),则非常简单。在sql server文档中查找字符串拆分。
╔════╦═════════════════╦═════════╦════════╗
║ id ║ Location ║ Country ║ Region ║
╠════╬═════════════════╬═════════╬════════╣
║ 1 ║ BEAAL - Aalter ║ Belgium ║ EMEA ║
║ 2 ║ YYYY - Gent ║ Belgium ║ XXXX ║
║ 3 ║ ZZZZZ - Brussel ║ Belgium ║ WWWWW ║
╚════╩═════════════════╩═════════╩════════╝