此腳本使用SplitStrings函數的稍微修改版本生成您想要的內容,可以在this answer中找到。所有功勞歸功於Aaron Bertrand。
修改SplitStrings功能:
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
);
腳本:
DECLARE @t TABLE(id int identity(1,1), blabla VARCHAR(512));
INSERT INTO @t(blabla)VALUES('BEAAL - Aalter - Belgium - EMEA');
INSERT INTO @t(blabla)VALUES('YYYY - Gent - Belgium - XXXX');
INSERT INTO @t(blabla)VALUES('ZZZZZ - Brussel - Belgium - WWWWW');
SELECT
t.id,
Location=MAX(CASE WHEN split.Id=1 THEN split.Item END)+' - '+MAX(CASE WHEN split.Id=2 THEN split.Item END),
Country=MAX(CASE WHEN split.Id=3 THEN split.Item END),
Region=MAX(CASE WHEN split.Id=4 THEN split.Item END)
FROM
@t AS t
CROSS APPLY dbo.SplitStrings(blabla) AS split
GROUP BY
t.Id;
結果:可當你搜索 'SQL Server 2008中拆分文本'
╔════╦═════════════════╦═════════╦════════╗
║ id ║ Location ║ Country ║ Region ║
╠════╬═════════════════╬═════════╬════════╣
║ 1 ║ BEAAL - Aalter ║ Belgium ║ EMEA ║
║ 2 ║ YYYY - Gent ║ Belgium ║ XXXX ║
║ 3 ║ ZZZZZ - Brussel ║ Belgium ║ WWWWW ║
╚════╩═════════════════╩═════════╩════════╝
什麼都沒有? – dfundako
如果結構是固定的(這意味着第一個和第二個部分總是位置,第三個始終是國家和地區始終是區域),這相當容易。在sql server文檔中查找字符串拆分。 –