我正在尝试连接两个表,其中我用于连接的两列(每个表一列)的值不完全相同,
左连接表的正则表达式是:(^d_0*\d+
例如 d_00233),右连接表的值是\d+
(例如 233)
是否可以在 SQL 中做到这一点?(我使用的是 Microsoft SQL Server 2008)
我正在尝试连接两个表,其中我用于连接的两列(每个表一列)的值不完全相同,
左连接表的正则表达式是:(^d_0*\d+
例如 d_00233),右连接表的值是\d+
(例如 233)
是否可以在 SQL 中做到这一点?(我使用的是 Microsoft SQL Server 2008)
试试这样:
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
查询如何:
SELECT * FROM Table1 a INNER JOIN Table2 b
ON CONVERT(INT, STUFF(a.ColumnName, 1, PATINDEX('%[0-9]%', a.ColumnName + '1')-1, ''))=b.ColumnName
实际上我决定使用以下 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) ,它似乎比正则表达式更容易使用