2016-06-28 13 views
0

Sorry, wenn dies eine grundlegende Frage ist, aber ich habe es nicht gelungen, eine Antwort auf Google usw.TSQL - Fügen zwei numerische Felder, jedoch mit unterschiedlichen Längen

Ich habe zwei Tabellen zu finden: Tabelle 1, Tabelle 2

Tabelle 1 hat ein Feld ‚ACCOUNTNO‘, die in 10 Zeichenzahlenfeld (Beispiel: 1122334455) ist

Tabelle 2 hat ein Feld ‚SUBACCNO‘, die ein 12-Zeichen ist numerisches Feld (Beispiel: 112233445501)

wie möglich siehe SUBACCNO ist das gleiche wie ACCOUNTNO, aber mit einem Zusatz zweistellige Ziffern am Ende von 01-99.

Wenn ich die beiden Tabellen anschließen möchten, und haben so etwas wie dies versucht:

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

Als Platzhalter kann nicht auf numerische Daten durchgeführt werden, habe ich versucht, es in einen String mit einem Platzhalter für die letzte Umwandlung zwei Zeichen. Dies bringt jedoch nichts zurück.

Kann jemand einen Rat geben? Vielen Dank!

+0

Sollen die letzten 2 Ziffern von 'SUBACCNO' nicht zum Vergleich verwendet werden? –

Antwort

3

Wie auf der SUBACCNO Spalte über den Beitritt von 100 geteilt:

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

Eigentlich sicher zu sein, Sie explizit die Quotienten mit der nullten Dezimalstelle wollen könnten trunkieren ROUND() mit:

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

Die Rundung schien den Trick zu machen. Danke für die Lösung. – bs3ac

0

Ihre Verbindung funktioniert nicht ..

Versuchen Sie dies, das ist nicht Sargable..wenn Sie nicht Ihr Design ändern können

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

Sie können auch eine weiteren berechnete Spalte wie unten und indiziert für eine gute Leistung hinzufügen, die ich empfehlen, wenn Sie Sie diese Art von Abfragen einer Menge

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

Jetzt verwenden kann für gut über Spaltenindex Leistung

Verwandte Themen