Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL Server 2008中的拆分文本_Sql Server 2008_Tsql - Fatal编程技术网

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  ║
╚════╩═════════════════╩═════════╩════════╝