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