SQL连接条件中的正则表达式

时间:2012-12-04 04:59:26

标签: sql regex sql-server-2008

我正在尝试连接两个表,其中我用于连接的两列(每个表一列)的值不完全相同,

左连接表的正则表达式为:^d_0*\d+(例如d_00233),右连接表的值为\d+(例如233)

是否可以在SQL中执行此操作? (我正在使用Microsoft SQL Server 2008)

3 个答案:

答案 0 :(得分:2)

试试这样:

Select * from TableA a
Inner join TableB    b
On Right(a.Column1,3)= b.Column1

此外,您可以使用CTE获取正确连接的表数据(例如233)的长度,该数据的长度为3,并在我使用RIGHT的{​​{1}}函数参数中重用此长度。

修改

没有CTE,我认为这应该有效:

3

答案 1 :(得分:1)

查询怎么样:

SELECT * FROM Table1 a INNER JOIN Table2 b 
ON CONVERT(INT, STUFF(a.ColumnName, 1, PATINDEX('%[0-9]%', a.ColumnName + '1')-1, ''))=b.ColumnName

答案 2 :(得分:0)

实际上我决定使用以下SQL而不是正则表达式:

SELECT * FROM din2class RIGHT OUTER JOIN features_top20 ON din2class.din = CAST(SUBSTRING(dbo.features_top20.feature, 3,LEN(dbo.features_top20.feature)) AS INT)

所以不使用正则表达式而是使用简单的子串和&转换(删除起始0),它似乎比正则表达式

更容易使用