SQL Server - 将字段拆分为4列

时间:2018-04-03 13:50:57

标签: sql-server

我有一个函数在遇到回车符时将地址行拆分为4列。它是一个多语句表值函数。如何使用它从地址表中拆分地址行字段?我不能使用连接,因为它使用表字段作为参数。任何线索?

SELECT [ID], [ADDRESS_LINE] FROM [dbo].[ADDRESS]

该函数需要3个参数:Address_ID,Address字符串和回车符。

[dbo].[fn_Split_Address](ID, ADDRESS_LINE, CHAR(13))

帮助理解的示例:

SELECT A.Addresse_ID, A.Adresse_1, A.Adresse_2, A.Adresse_3,
A.Adresse_4 FROM RE7_Pass.[dbo].[fn_Split_Address](888999, '10
Burlington street' + CHAR(13) + 'Chicago'+ CHAR(13) +
'Illinois',CHAR(13)) AS A

结果如下:

enter image description here

1 个答案:

答案 0 :(得分:4)

扩展Pawan的评论:

SELECT A.[ID],
       A.[ADDRESS_LINE],
       SA.Address1,
       SA.Address2,
       SA.Address3,
       SA.Address4
FROM [dbo].[ADDRESS] A
     CROSS APPLY [dbo].[fn_Split_Address] (A.ID, A.Address_Line, CHAR(13)) SA;

FROM条款的文档很好地解释了如何从TVF获取数据: Using APPLY

  

APPLY运算符的左右操作数都是表表达式。这些操作数之间的主要区别在于right_table_source可以使用表值函数,该函数将left_table_source中的列作为函数的参数之一。 left_table_source可以包含表值函数,但它不能包含来自right_table_source的列的参数。

它还在页面下方using CROSS APPLY提供了更多示例。他们提供的例子是:

USE master;  
GO  
SELECT dbid, object_id, query_plan   
FROM sys.dm_exec_cached_plans AS cp   
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);   
GO