我有一个表格,其中包含以逗号分隔的电子邮件地址列表和帐户名称。基本上我的目标是按电子邮件地址分开它们。
所以我的初始表是这样的:
Email Account
abc@test.com, bcd@gmail.com Company A
hello@yahoo.com, sayonara@gmail.com Company B
我的目标是制作一个这样的结果表:
Result Account
abc@test.com Company A
bcd@gmail.com Company A
hello@yahoo.com Company B
sayonara@gmail.com Company B
所以我从这里开始阅读有关创建分割函数的解决方案: T-SQL: Opposite to string concatenation - how to split string into multiple records
所以这是我的分裂功能:
create FUNCTION [dbo].[SplitAgain] (@sep VARCHAR(32), @s VARCHAR(MAX))
RETURNS TABLE
AS
RETURN
(
SELECT r.value('.','VARCHAR(MAX)') as Item
FROM (SELECT CONVERT(XML, N'<root><r>' + REPLACE(REPLACE(REPLACE(@s,'& ','& '),'<','<'), @sep, '</r><r>') + '</r></root>') as valxml) x
CROSS APPLY x.valxml.nodes('//root/r') AS RECORDS(r)
)
然后我从下面的表中做了一个SELECT,我想这个函数的结果将存储在&#39; Item&#39;列中。
SELECT email_address,Item, account
FROM contact
CROSS APPLY dbo.SplitAgain(email_address,',')
但是我很困惑,因为结果是这样的......结果&#39;项目&#39;只是逗号。
Email Result Account
abc@test.com, bcd@gmail.com , Company A
hello@yahoo.com, sayonara@gmail.com , Company B
我确实错过了一些东西。任何帮助表示赞赏!
-icha
答案 0 :(得分:1)
您的参数顺序已反转
SELECT email_address,Item, account
FROM contact
CROSS APPLY dbo.SplitAgain(',',email_address)