我正在尝试连接两个表,其中我用于连接的两列(每个表一列)的值不完全相同,
左连接表的正则表达式为:^d_0*\d+
(例如d_00233),右连接表的值为\d+
(例如233)
是否可以在SQL中执行此操作? (我正在使用Microsoft SQL Server 2008)
答案 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),它似乎比正则表达式
更容易使用