0

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

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

是否可以在 SQL 中做到这一点?(我使用的是 Microsoft SQL Server 2008)

4

3 回答 3

2

试试这样:

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

您还可以使用 CTE 获取正确连接表数据的长度(例如 233),长度为 3,并RIGHT在我使用过的函数参数中重用此长度3

编辑:

如果没有 CTE,我认为这应该可行:

Select * from TableA a
Inner join TableB    b
On Right(a.Column1,LEN(b.Column1))= b.Column1
于 2012-12-04T06:22:35.017 回答
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
于 2012-12-04T05:28:31.100 回答
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)

因此,我没有使用正则表达式,而是使用了简单的 Substring & Casting (to remove starting 0s) ,它似乎比正则表达式更容易使用

于 2012-12-04T05:54:49.010 回答