如果它很重要,两列都是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值吗?目前为止的答案都没有解决这种情况。 –