You are not logged in.

  • Login

1

Wednesday, January 26th 2011, 11:58am

SQL-Abfrage: Alle Zeichen nach dem letzten Punkt?

Hallo zusammen,

habe das Problem, dass ich Dateinamen in der Datenbank gespeichert habe z.B. "datei.n(a)me.png" und "dateiname2.doc"

Nun möchte ich zur weiteren Verwendung nur die Dateiendung rausfiltern, also alles was hinter dem letzten Punkt steht. In den Beispielen wäre es einmal "png" und "doc". Wie sieht da die SQL-Abfrage aus`?

Freue mich über jede Antwort!

2

Wednesday, January 26th 2011, 12:33pm

Hallo,

mein Vorschlag wäre die Aufgabe wie folgt zu lösen:

SELECT *
FROM <Tabelle>
WHERE <Spalte> LIKE '%.doc' or <Spalte> LIKE '%.png'

Viele Grüße
Keen Thinker

3

Wednesday, January 26th 2011, 12:57pm

hi,
schau dir mal SUBSTR() und CHARINDEX () genauer an.
denke in kombination kannst du mit dene genau das anstellen was du willst ;)

greeetz kardas

4

Wednesday, January 26th 2011, 1:48pm

@Keen Thinker: Das hätte ich auch so gemacht, würde ich nur wissen was für Dateien die User alle hochladen im Intranet ;) (Soll, da es ja intern ist, ohne Einschränkung sein)

@theKardas: Genau an Substr() habe ich auch schon gedacht (hatte ich schon erfolgreich im Einsatz bei einem anderen Problem), leider sind es ja nicht immer nur drei Buchstaben, weshalb ich alleine mit der Funktion nicht weiterkam :( Charindex() kenne ich aber noch nicht, wollte ich gerade mal versuchen aber der sagt mir bei dem Test:

PHP Quellcode

1
CHARINDEX ('b', 'abcd', -5);


folgende Fehlermeldung: Fatal error: Call to undefined function CHARINDEX()

Kann nicht an einer alten PHP Version liegen, habe PHP Version 5.3.1

5

Thursday, January 27th 2011, 6:58am

oh vergiss des mit dem Carindex(), da hab ich mich vertan.
LOCATE(substr,str) sollte das sein was du suchst

greeetz kardas

6

Friday, January 28th 2011, 10:51am

locate()? Finde auf http://de.php.net leider keine Beschreibung über die Funktion was die genau macht, Beispiele und wie ich die anwende :(

Hast du da Beispiele und Erklärungen?

7

Friday, January 28th 2011, 10:53am

is auch keine PHP Funktion sonder SQL.
du wolltest das ganze doch nur durch ein SQL-Statement hin bekommen oder?

This post has been edited 1 times, last edit by "theKardas" (Jan 28th 2011, 11:02am)


8

Friday, January 28th 2011, 12:46pm

Stimmt, sorry :D (Obwohl ich PHP nehmen würde, wenn es einfacher gehen würde :D)

Also habe jetzt rumgetestet und ich bekomme es einfach nicht hin :(

Hast du ein Beispielcodeschnipsel wenn z.B. in der Spalte "dateiname" der Pfad "testbeispiel.pdf" stehen würde?

Würde mich riesig freuen, habe gerade schon alles versucht aber es kam nichts bei raus :(

9

Friday, January 28th 2011, 10:12pm

Hi, im deutschen MySQL Handbuch findest du Beispiele: http://dev.mysql.com/doc/refman/5.1/de/s…function_locate

Source code

1
2
3
4
5
6
mysql> SELECT LOCATE('bar', 'foobarbar');
        -> 4
mysql> SELECT LOCATE('xbar', 'foobar');
        -> 0
mysql> SELECT LOCATE('bar', 'foobarbar', 5);
        -> 7

10

Tuesday, February 1st 2011, 11:20am

Dankeschön! Klappt auch soweit, hier der Code:

SQL Code

1
SELECT SUBSTRING('".$row[dateiname]."' FROM LOCATE('.', '".$row[dateiname]."')) AS 'dieendung'


Wenn ich jetzt aber die Datei 23.10.2011.doc habe, hat er viele Probleme mit den vorherigen Punkten und gibt alles aus, nur nicht das was er soll :( Brauche irgendwie wirklich nur (von hinten gesehen) alles nach dem LETZTEN Punkt. Wie muss ich mein schnipsel da anpassen?

11

Tuesday, February 1st 2011, 11:37am

vielleicht nicht so schön, aber du kannst mit reverse arbeiten... Also erst den String mit REVERSE umkehren, dann den ersten Punkt suchen und alles was davor steht ist dann die Endung... Die musst du dann noch mal reversen, weil die ja dann auch umgekehrt vorliegt.

Also quasi in der Richtung (ungetestet):

SQL Code

1
SELECT REVERSE(SUBSTRING(REVERSE('23.10.2011.doc'), 1, LOCATE('.',REVERSE('23.10.2011.doc')) - 1));

Aber wie gesagt, schön ist was anderes ;)

This post has been edited 2 times, last edit by "Rondrer" (Feb 1st 2011, 11:46am)


12

Tuesday, February 1st 2011, 12:02pm

Danke, hat funktioniert :D

13

Tuesday, February 1st 2011, 12:13pm

Wobei Moment, da wird ja dann nur "doc" ausgegeben :( Fehlt also der Punkt für ".doc". Könnte es zwar manuell hinzufügen, falls aber kein Punkt im Pfad vorhanden ist, soll ja auch nichts angezeigt werden und nicht "." ;D

// Edit: Selbst gefunden :D -1 einfach weg machen^^

This post has been edited 1 times, last edit by "Tobbe5" (Feb 1st 2011, 1:37pm)


Similar threads

Social bookmarks