2012-11-28 41 views
0

我想要在包含我想要分割的值的列上执行联接。因此,如果该列包含电子邮件地址,我想加入“@”符号前的部分。SQL加入拆分?

我已经看到了拆分功能,但我没有看到任何地方我可以选择哪个数组元素从拆分结果中选择?

因此,像:

JOIN ON dbo.split('@',T1.Column)(0)? 
+0

是有一个内置的分割功能,或者你只是写一个? – Tobsey

回答

1

我想你最好还是刚刚加盟的子串起来的@符号:

SELECT * 
FROM Email 
LEFT JOIN EmailName ON Substring(Email.Address, 1, CharIndex('@', Email.Address) - 1) = EmailName.Name 

见小提琴这里: http://www.sqlfiddle.com/#!6/5d0f5/8

+1

我同意。如果只执行一个分割,则不需要“分割”。但要小心由于可能没有“@”值的值引起的SUBSTRING错误。避免这种情况的一种方法是在应用SUBSTRING之前仅预先选择列_does_包含“@”的行。 – sebt

+0

@sebt - 你是对的。我会扩大这个以迎合空值,无效值等并进行相应的测试。不过,我认为这足以说明我的观点。 – Tobsey