# [MySQL] Substring mit Position vom Ende aus



## Tim C. (23. März 2004)

Hi,

in PHP kann ich zum Beispiel einen Substring bilden, der mir ab der vorletzten Position alles ausliest, der sieht dann meist so aus

```
substr($string,-2)
```

MySQL frisst das jedoch nicht. Jetzt meine Frage: Kann MySQL das nicht - Startposition vom Stringende her bestimmen, oder nutze ich nur die falsche Syntax? Hatte es probiert mit

```
SELECT SUBSTRING(`level`,-2,2) FROM [...]
```

Geht aber nicht, liefert mir nämlich leere Ergebnisse zurück.

Es funkioniert mit

```
SELECT SUBSTRING(  `level` , LENGTH(  `level`  )  - 1, 2  ) 
FROM ...
```
aber wüsste halt gerne, ob das die einzige Möglichkeit ist


----------



## Thomas Darimont (23. März 2004)

Hallo!


```
mysql> select Artikelname from artikel limit 2;
+-------------+
| Artikelname |
+-------------+
| Chai        |
| Chang       |
+-------------+
2 rows in set (0.00 sec)

mysql> select SUBSTRING(Artikelname,1,2) from artikel limit 2;
+----------------------------+
| SUBSTRING(Artikelname,1,2) |
+----------------------------+
| Ch                         |
| Ch                         |
+----------------------------+
2 rows in set (0.00 sec)
```

Bei mir geht das ... ;-)

Gruß Tom


----------



## Tim C. (23. März 2004)

> _Original geschrieben von Thomas Darimont _
> *Hallo!
> 
> *
> ...


Du hast mich missverstanden. Bei der Abfrage müsste einmal "ai" und einmal "ng" rauskommen. Also immer die letzten zwei


----------



## Thomas Darimont (23. März 2004)

Jetzt aber:


```
mysql> select SUBSTRING(Artikelname,1,2) from artikel limit 2;
+----------------------------+
| SUBSTRING(Artikelname,1,2) |
+----------------------------+
| Ch                         |
| Ch                         |
+----------------------------+
2 rows in set (0.00 sec)

mysql> select Artikelname from artikel limit 2;
+-------------+
| Artikelname |
+-------------+
| Chai        |
| Chang       |
+-------------+
2 rows in set (0.00 sec)

mysql> select SUBSTRING(Artikelname,CHAR_LENGTH(Artikelname)-1,2) from artikel l
imit 2;
+-----------------------------------------------------+
| SUBSTRING(Artikelname,CHAR_LENGTH(Artikelname)-1,2) |
+-----------------------------------------------------+
| ai                                                  |
| ng                                                  |
+-----------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
```

Gruß Tom


----------



## ManicMarble (24. März 2004)

Hi,
mir fallen spontan folgende Möglichkeiten ein:

Für die letzten 2 Zeichen:

```
SELECT RIGHT('123456789', 2) -> '89'
```

bzw. für die ersten 2 Zeichen ab der 4.-letzten Position:

```
SELECT LEFT(RIGHT('123456789', 4), 2) -> '67'
```

Viele Grüße


----------

