2017-03-06 2 views
2

Ich habe eine Reihe von Teilenummern, die normalerweise nur 10 Zeichen haben, aber manchmal eine extra 2 oder 3 am Anfang enthalten. Ich möchte eine eindeutige Liste aller dieser Teile mit Ausnahme der letzten 5 Zeichen, die nur Größeninformationen enthalten. Offensichtlich funktioniert ein einfacher Teilstring nicht und, soweit ich weiß, ist rtrim() nicht ähnlich, was die Spezifizierung von Zeichenbereichen erlaubt. Ich habe meine Lösung unten gepostet, aber ich denke, es ist etwas schlampig und wollte wissen, ob es einen besseren Weg gibt?Erhalten einer Unterzeichenkette unbestimmter Länge, beginnend am Ende der Zeichenkette

SELECT 
    DISTINCT REVERSE(SUBSTRING(REVERSE(P.ID),6,LEN(P.ID))), 
    P.DESCRIPTION 
FROM REQUIREMENT R 
INNER JOIN OPERATION O ON 
    R.WORKORDER_BASE_ID = O.WORKORDER_BASE_ID AND 
    R.WORKORDER_LOT_ID = O.WORKORDER_LOT_ID AND 
    R.WORKORDER_SUB_ID = O.WORKORDER_SUB_ID 
INNER JOIN PART P ON 
    P.ID = R.PART_ID 
    WHERE O.RESOURCE_ID LIKE '%17%' 
    AND P.ID LIKE '%[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9]' 
    AND P.DESCRIPTION NOT LIKE '%OBS%' 
    AND O.STATUS_EFF_DATE > GETDATE() - 365*2 
+2

Was ist los mit 'Left (Wert, len (Wert) - 5)'? –

+0

Absolut nichts. Ich kann nicht glauben, dass ich nicht daran gedacht habe. Vielen Dank! – mreff555

+0

Sie sollten DATEADD (Jahr, -2, GETDATE()) anstelle Ihrer Kurzschrift verwenden. Es ist klarer, genauer und weniger anfällig für Datentypenfehler. http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx –

Antwort

4

Die Art und Weise, wie Sie dies formuliert haben, möchten Sie die letzten fünf Zeichen abzustreifen. Es gibt zwei Möglichkeiten, dies zu tun. Eins, ziehen Sie einfach alle bis auf die letzten fünf Zeichen, und das andere ist, REVERSE zu verwenden, ziehen Sie die ersten 5 und REVERSE erneut ab. Sie haben letzteres in Ihrem Beispiel gemacht, aber dies ist die andere Alternative:

Ist das nicht, was Sie wollen?

+0

Es ist. Vielen Dank. Noch einmal, ich bin mir nicht sicher, warum ich nicht daran gedacht habe. – mreff555

Verwandte Themen