BETWEEN funktioniert nicht richtig...
BETWEEN funktioniert nicht richtig...
am 26.07.2006 11:55:23 von christoph.soellner
Hi *,
ich habe eine Maske die mir zwei Buchstaben gibt,
z.B. 'A' und 'C'. Jetzt moechte ich mittels mysql
die Datensaetze haben, wo der Nachname mit A, B oder
C beginnt;
SELECT *
FROM mytable
WHERE UPPER(nachname) BETWEEN 'A%' AND 'C%'
Leider kommen dann nur alle A* und B*, aber nicht
C*. Das kann ich mit PHP korrigieren, nur bekomme
ich so niemals alle Z* Leute.
Was mache ich denn da?
Danke,
Christoph
Re: BETWEEN funktioniert nicht richtig...
am 26.07.2006 12:48:29 von do.not.REMOVETHAT
Christoph Söllner schrieb:
> WHERE UPPER(nachname) BETWEEN 'A%' AND 'C%'
>
> Leider kommen dann nur alle A* und B*, aber nicht
> C*.
Hm. genau.
> Was mache ich denn da?
BETWEEN ist BETWEEN und LIKE ist LIKE. LIKE ist das mit dem "%".
Theoretisch geht auch BETWEEN mit "%", aber da ist ein "%" nur ein "%"
und nicht das, was es bei LIKE ist. Du willst wahrscheinlich, dass es
das ist, was es bei LIKE ist.
Schreib einfach "BETWEEN 'A' AND 'D'" - und gut ist. Vielleicht willst
Du aber auch mit SUBSTRING(zeichenkette,position,laenge) und "IN"
arbeiten? Vielleicht einfach mit ">=" und "<="? Was willst Du denn
erreichen?
Grüße, Matthias
Re: BETWEEN funktioniert nicht richtig...
am 26.07.2006 12:49:55 von Gregor Kofler
Christoph Söllner meinte:
[between funktioniert schon richtig]
> ich habe eine Maske die mir zwei Buchstaben gibt,
> z.B. 'A' und 'C'. Jetzt moechte ich mittels mysql
> die Datensaetze haben, wo der Nachname mit A, B oder
> C beginnt;
> SELECT *
> FROM mytable
> WHERE UPPER(nachname) BETWEEN 'A%' AND 'C%'
Ohne es getestet zu haben:
1) Glaube ich nicht, dass between Wildcards als solche interpretiert.
> Leider kommen dann nur alle A* und B*, aber nicht
> C*. Das kann ich mit PHP korrigieren, nur bekomme
> ich so niemals alle Z* Leute.
> Was mache ich denn da?
2) between 'A' and 'ZZZZ' vielleicht? Oder between 'A' and 'Z' or ...
like 'z%'?
Wohl am besten: left(upper(nachname, 1)) between 'A' and 'Z'
Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: BETWEEN funktioniert nicht richtig...
am 26.07.2006 13:01:41 von Helmut Chang
Christoph Söllner schrieb:
> Jetzt moechte ich mittels mysql
> die Datensaetze haben, wo der Nachname mit A, B oder
> C beginnt;
Warum tust du das dann nicht?
> WHERE UPPER(nachname) BETWEEN 'A%' AND 'C%'
Bedeutet AFAIK dasselbe wie:
WHERE UPPER(nachname) >= 'A%' AND UPPER(nachname) <= 'C%'
Du willst aber:
WHERE erster_Buchstabe_des_Nachnamens BETWEEN 'A' AND 'C'
Wie das geht, sagt dir das MySQL-Manual.
Abgesehen davon ist kein PHP-Problem zu erkennen, deshalb X'Post und
F'Up nach de.comp.datenbanken.mysql
gruss, heli
Re: BETWEEN funktioniert nicht richtig...
am 26.07.2006 13:32:11 von Jan Peters
Am Wed, 26 Jul 2006 11:55:23 +0200 schrieb Christoph Söllner:
> Hi *,
>
> ich habe eine Maske die mir zwei Buchstaben gibt,
> z.B. 'A' und 'C'. Jetzt moechte ich mittels mysql
> die Datensaetze haben, wo der Nachname mit A, B oder
> C beginnt;
> SELECT *
> FROM mytable
> WHERE UPPER(nachname) BETWEEN 'A%' AND 'C%'
>
> Leider kommen dann nur alle A* und B*, aber nicht
> C*.
Das ist auch korrekt so. BETWEEN ist BETWEEN und nicht LIKE.
cu
Jan
Re: BETWEEN funktioniert nicht richtig...
am 26.07.2006 15:23:28 von Andreas Froede
Christoph Söllner wrote:
> die Datensaetze haben, wo der Nachname mit A, B oder
> SELECT *
> FROM mytable
> WHERE UPPER(nachname) BETWEEN 'A%' AND 'C%'
AU!
SELECT *
FROM tabelle
WHERE Substring (Upper(nachname),1,1) BETWEEN 'A' AND 'C';
CIAO
andreas
--
.... oben geht es um den Thron - unten geht es um Deinen Hintern ...
[Keimzeit]
Klettern in Thüringen: http://www.climb.spider-net.de
Kletterhalle in Jena: http://www.wand.spider-net.de