Entfernen Sie die letzten beiden Zeichen einer Spalte in MySQL

77

Ich habe eine SQL-Spalte, in der die Einträge Zeichenfolgen sind. Ich muss diese Einträge nach dem Trimmen der letzten beiden Zeichen anzeigen, z. B. wenn der Eintrag 199902345ausgegeben wird 1999023.

Ich habe versucht, in TRIM zu schauen, aber es sieht so aus, als ob es nur dann möglich ist, zu trimmen, wenn wir wissen, was die letzten beiden Zeichen sind. Aber in meinem Fall weiß ich nicht, was diese letzten beiden Zahlen sind und sie müssen einfach verworfen werden.

Kurz gesagt, welche MySQL-Zeichenfolgenoperation ermöglicht es, die letzten beiden Zeichen einer Zeichenfolge zu kürzen?

Ich muss hinzufügen, dass die Länge der Zeichenfolge nicht festgelegt ist. Es können 9 Zeichen, 11 Zeichen oder was auch immer sein.

Glücklicher Murari
quelle
Was ist der Datentyp der Spalte? INT oder VARCHAR. INT ermöglicht schnellere Berechnungen.
Salman A
@ Salman sein VARCHAR (wie wir Chars auch in unserer Implementierung haben)
Lucky Murari
1
OK erscheint dann SUBSTRINGangemessen. Für den INT-Datentyp war es so einfach wie das Teilen durch 100.
Salman A

Antworten:

120

Um alle Zeichen außer dem letzten n aus einer Zeichenfolge auszuwählen (oder anders ausgedrückt, entfernen Sie die letzten n Zeichen aus einer Zeichenfolge). Verwenden Sie die SUBSTRINGund CHAR_LENGTHFunktionen zusammen:

SELECT col
     , /* ANSI Syntax  */ SUBSTRING(col FROM 1 FOR CHAR_LENGTH(col) - 2) AS col_trimmed
     , /* MySQL Syntax */ SUBSTRING(col,     1,    CHAR_LENGTH(col) - 2) AS col_trimmed
FROM tbl

Verwenden Sie die folgende TRIMFunktion, um einen bestimmten Teilstring vom Ende des Strings zu entfernen :

SELECT col
     , TRIM(TRAILING '.php' FROM col)
-- index.php becomes index
-- index.txt remains index.txt
Salman A.
quelle
71

Warum nicht die LEFT-Funktion (Zeichenfolge, Länge) anstelle der Teilzeichenfolge verwenden?

LEFT(col,length(col)-2) 

Sie können hier https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_left besuchen , um mehr über MySQL-String-Funktionen zu erfahren.

Larz
quelle
1
Obwohl die akzeptierte Antwort korrekt ist, bevorzuge ich diese Antwort. Ich habe eine Diskussion darüber gelesen, dass LEFT () etwas performanter ist als SUBSTRING (), aber ich kann momentan keinen Link finden. Es wäre großartig, wenn Sie einen Link zur MySQL-Dokumentation für die LEFT-Funktion hinzufügen könnten.
Anuragw
1
Viel bessere Lösung als SUBSTRING ()
Matthias Kleine
Wenn der Unterschied , 1im Funktionsaufruf liegt, denke ich, dass eine ganz neue Funktion nur die Verschmutzung des Namespaces ist. Dies ist insofern RIGHTetwas nützlicher, als es Sie möglicherweise vor einer LENGTH()Berechnung bewahrt. Dennoch ist jeder Leistungsgewinn zwischen diesen beiden wahrscheinlich viel geringer als die Kosten für einen LENGTH()separaten Anruf . Ein oder zwei Addiervorgänge pro Aufruf sind der einzige Unterschied zwischen LEFT RIGHTund SUBSTRING. In SQL Performance 2 sind native Adds nichts.
Ebyrob
Ich musste CHAR_LENGTH anstelle von LENGTH verwenden, aber diese Lösung funktionierte gut.
Anthony Taylor
0

Sie können ein LENGTH(that_string)Minuszeichen verwenden, das number of charactersSie in der SUBSTRING()Auswahl entfernen möchten, oder die TRIM()Funktion verwenden.

Richard
quelle
1
Wenn Sie ein Beispiel für die TRIM()Arbeit für alle Zeichen anhand des Index zeigen können, anstatt alle bestimmten Zeichentypen zu entfernen, würde mich das interessieren.
Ebyrob