2016-06-28 85 views
0

很抱歉,如果這是一個基本的問題,但我一直無法找到對谷歌等TSQL - 連接兩個數字字段,但具有不同長度的

答案我有兩個表:表1,表2

表1具有字段「ACCOUNTNO」,這是一個10字符的數字字段(例如:1122334455)

表2具有字段「SUBACCNO」,這是一個12字符的數字字段(例如:112233445501)

,你可以請參閱SUBACCNO與ACCOUNTNO相同,但添加了一個終點兩位數字,最後從01-99開始。

如果我想加入的兩個表,並一直在努力這樣的事情:

SELECT * 
FROM TABLE1 
JOIN TABLE2 
ON TABLE1.ACCOUNTNO = TABLE2.SUBACCNO 
WHERE STR(SUBACCNO) LIKE '1122334455%%' 

作爲通配符不能在數值數據進行我試圖將其與通配符轉換爲字符串最後兩個字符。然而這不會返回任何結果

有人能提供一些建議嗎?謝謝!

+0

最後2位數字的'SUBACCNO'不能用於比較嗎? –

回答

3

如何加入對SUBACCNO列除以100:

SELECT * 
FROM TABLE1 
JOIN TABLE2 
    ON TABLE1.ACCOUNTNO = TABLE2.SUBACCNO/100 

事實上,爲了安全起見,你可能想使用ROUND()明確截斷商以零小數位:

SELECT * 
FROM TABLE1 
JOIN TABLE2 
    ON ROUND(TABLE1.ACCOUNTNO, 0, 1) = ROUND(TABLE2.SUBACCNO/100, 0, 1) 
+1

四捨五入似乎做到了。感謝您的解決方案。 – bs3ac

0

你的加入不會工作..

試試這個,這不是Sargable ..如果你不能改變你的設計

SELECT * 
FROM TABLE1 
JOIN TABLE2 
ON TABLE1.ACCOUNTNO = cast(substring(TABLE2.SUBACCNO,1,10) as bigint) 

,你還可以添加一個像下面,並且我建議,如果您使用的這些類型的查詢很多

create table yourtable 
(
accno bigint, 
accno1 as cast(substring(accno,1,10) as bigint) persisted 
) 

現在指數是良好的性能更加計算列,你可以索引以上爲好列性能