如果它很重要,兩列都是tinyint
。SQL加入部分列數據(SQL Server)
表1
Version
--------
111115
222226
333337
表2
ID Year
--------
5 2015
6 2016
7 2017
我需要加入的ID從表2,如果它等於從表中的版本字段的最後一個值1
版本111115將加入ID 5.我知道如何選擇這樣的事情,但加入g可行嗎?結果是:
111115 5 2015
TIA!
如果它很重要,兩列都是tinyint
。SQL加入部分列數據(SQL Server)
表1
Version
--------
111115
222226
333337
表2
ID Year
--------
5 2015
6 2016
7 2017
我需要加入的ID從表2,如果它等於從表中的版本字段的最後一個值1
版本111115將加入ID 5.我知道如何選擇這樣的事情,但加入g可行嗎?結果是:
111115 5 2015
TIA!
可以使用RIGHT()
功能來做到這一點:
SELECT *
FROM Table1 A
INNER JOIN Table2 B on RIGHT(A.Version,1) = B.ID
我可能會避免這樣做非常多,雖然。這是一個錯誤的數據庫設計。也許列ID
添加到表1,並使用:
UPDATE Table1
SET ID = RIGHT(Version,1)
這正是我需要的,謝謝! – Joshua
@Joshua沒問題,歡呼聲 –
,因爲它們都是整數,你可以嘗試模運算符。它需要分割後的剩餘部分。所以111115 % 10
是5
SELECT *
FROM Table1 t1
INNER JOIN Table2 t2 on t1.Version % 10 = t2.ID
Declare @tblTest as table
(
id INT,
yearName INT
)
Declare @tblVersion as table
(
VersionNo INT
)
INSERT INTO @tblTest values(5,2015)
INSERT INTO @tblTest values(6,2016)
INSERT INTO @tblTest values(7,2017)
INSERT INTO @tblVersion values(111115)
INSERT INTO @tblVersion values(111116)
INSERT INTO @tblVersion values(111117)
select
*,RIGHT(VersionNo,1)
from @tblVersion
SELECT
*
FROM @tblTest T1
LEFT JOIN (SELECT RIGHT(VersionNo,1) AS VersionId,VersionNo FROM @tblVersion) T2 ON T2.VersionId=T1.id
你可以加入你做出一個字段的任何修改,但也有性能命中。所以你可以加入SUBSTRING(table1.Version,len(version)-1,1)= Table2.ID(如果你想的話)。可能性會很慢。最好的辦法是把它放入臨時表中,方法是選擇子字符串和版本,然後將它加入到Table2中 –
你會有大於9的TABLE2.ID值嗎?目前爲止的答案都沒有解決這種情況。 –