結合に使用する2つの列(各テーブルに1つの列)の値が完全に同じではない2つのテーブルを結合しようとしています。
左結合テーブルの正規表現は:^d_0*\d+
(eg d_00233)であり、右結合テーブルの値は\d+
(eg 233)です。
SQLでそれを行うことは可能ですか?(私はMicrosoft SQL Server 2008を使用しています)
結合に使用する2つの列(各テーブルに1つの列)の値が完全に同じではない2つのテーブルを結合しようとしています。
左結合テーブルの正規表現は:^d_0*\d+
(eg d_00233)であり、右結合テーブルの値は\d+
(eg 233)です。
SQLでそれを行うことは可能ですか?(私はMicrosoft SQL Server 2008を使用しています)
このようにしてみてください:
Select * from TableA a
Inner join TableB b
On Right(a.Column1,3)= b.Column1
また、CTEを使用して、長さが3になる右結合テーブルデータ(たとえば233)の長さを取得し、この長さを使用した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)
したがって、正規表現を使用する代わりに、単純な部分文字列とキャスト(開始0を削除するため)を使用しましたが、正規表現よりも使いやすいようです。