Holen Sie sich alle Zeichen vor Leerzeichen in MySQL

79

Ich möchte alle Zeichen in einem Feld vor einem Leerzeichen erhalten

Zum Beispiel, wenn field1ist"chara ters"

Ich möchte, dass es zurückkommt "chara"

Wie würde diese select-Anweisung aussehen?

Alex Gordon
quelle

Antworten:

113

SELECT LEFT(field1,LOCATE(' ',field1) - 1)

Beachten Sie, dass, wenn die betreffende Zeichenfolge keine Leerzeichen enthält, eine leere Zeichenfolge zurückgegeben wird.

Mchl
quelle
6
Es gibt 'chara' mit Leerzeichen zurück. Sie müssen das Ergebnis von LOCATE verringern, wenn Sie am Ende kein Trennzeichen benötigen: SELECT LEFT (Feld1, LOCATE ('', Feld1) - 1)
Enyby
1
Dies funktioniert nicht, wenn Ihr Hauptfeld keinen Platz enthält. Die Teilzeichenfolge gibt einen leeren Wert zurück, anstatt eine ganze Zeichenfolge zurückzugeben. Wenn mein Feld beispielsweise die Zeichenfolge "Test-möglich-falscher-Name" enthält, gibt der Teilstring nichts anstelle von "Test-möglich-falsch-Name" zurück.
Swapnil Gangrade
2
@ SwapnilGangrade Abhängig vom tatsächlichen Anwendungsfall kann ein Verhalten erwartet werden oder nicht. Man könnte argumentieren, dass, wenn in der Zeichenfolge kein Leerzeichen vorhanden ist, vor dem Leerzeichen keine Zeichen stehen und daher eine leere Zeichenfolge zurückgegeben werden sollte. In einem solchen Fall möchte eine andere Person möglicherweise eine ganze Zeichenfolge zurückgeben. Die Frage gibt nicht an, wie sich die Funktion in diesem Randfall verhalten soll. Ich werde die Antwort aktualisieren, um sie hervorzuheben.
Mchl
11
Dann select SUBSTRING_INDEX( field1, ' ', 1 ) from table;ist die Wahl, ob wir eine vollständige Zeichenfolge haben möchten, wenn kein Leerzeichen vorhanden ist.
Swapnil Gangrade
2
Die Antwort unter ( SUBSTRING_INDEX) ist als allgemeine Lösung "besser", da Werte beibehalten werden, die kein Trennzeichen enthalten, anstatt einen leeren Wert zu ergeben.
entartet
87

Im Folgenden finden Sie eine weitere Methode, die funktioniert und einigen möglicherweise etwas einfacher erscheint. Es verwendet die MySQL-Funktion SUBSTRING_INDEX . Eine 1 gibt alles vor dem ersten Leerzeichen zurück und eine -1 gibt alles nach dem letzten Leerzeichen zurück.

Dies gibt 'chara' zurück:

SELECT SUBSTRING_INDEX( field1, ' ', 1 )

Dies gibt 'ters' zurück:

SELECT SUBSTRING_INDEX( field1, ' ', -1 )

Einzelheiten

Ein positiver Wert sucht am Anfang der Zeichenfolge nach Ihrem angegebenen Zeichen, und ein negativer Wert beginnt am Ende der Zeichenfolge. Der Wert der Zahl gibt die Anzahl der angegebenen Zeichen an, nach denen gesucht werden muss, bevor das verbleibende Teil der Zeichenfolge zurückgegeben wird. Wenn das gesuchte Zeichen nicht vorhanden ist, wird der gesamte Feldwert zurückgegeben.

In diesem Fall würde ein -2 alles rechts vom vorletzten Leerzeichen zurückgeben, was in diesem Beispiel nicht vorhanden ist, sodass der gesamte Feldwert zurückgegeben wird.

T. Brian Jones
quelle
3
Dies funktioniert auch, wenn Zeichenfolgen ohne Leerzeichen vorhanden sind. Beispielsweise funktioniert auch 'chara'.
Bernhardh
2
Dies funktionierte hervorragend, um die Haupt- + Nebenversion einer Versionszeichenfolge mit xyz-Komponenten zu erhalten.
thomthom
4
Dies funktioniert am besten, wenn das gesamte Feld zurückgegeben werden soll, wenn das Zeichen nicht gefunden wurde.
stephentgrammer
Ich verwende dies, um Geokoordinaten aus einem Zeichenfolgenfeld zu extrahieren, für das ein Trennzeichen (Komma) garantiert ist.
Ob-Iwan
11

Sie würden dafür einige String-Operationen benötigen . Angenommen, jedes Feld hat mindestens ein Leerzeichen:

SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;

Sicherer Ansatz:

SELECT IF(
    LOCATE(' ', field1),
    SUBSTR(field1, 0, LOCATE(' ', field1)),
    field1
) FROM your_table;
Soulmerge
quelle
+1 für eine sichere Version, obwohl nicht klar ist, welches Ergebnis zurückgegeben werden soll, wenn das Feld kein Leerzeichen enthält.
Mchl
2
musste 0 für 1 ändern:SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;
Lluís