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
Was ist los mit 'Left (Wert, len (Wert) - 5)'? –
Absolut nichts. Ich kann nicht glauben, dass ich nicht daran gedacht habe. Vielen Dank! – mreff555
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 –