BETWEEN funktioniert nicht richtig...

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
christoph.soellner [ Mi, 26 Juli 2006 11:55 ] [ ID #1406106 ]

Re: BETWEEN funktioniert nicht richtig...

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
do.not.REMOVETHAT [ Mi, 26 Juli 2006 12:48 ] [ ID #1406107 ]

Re: BETWEEN funktioniert nicht richtig...

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
Gregor Kofler [ Mi, 26 Juli 2006 12:49 ] [ ID #1406108 ]

Re: BETWEEN funktioniert nicht richtig...

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
Helmut Chang [ Mi, 26 Juli 2006 13:01 ] [ ID #1406109 ]

Re: BETWEEN funktioniert nicht richtig...

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
Jan Peters [ Mi, 26 Juli 2006 13:32 ] [ ID #1406110 ]

Re: BETWEEN funktioniert nicht richtig...

Christoph Söllner <christoph.soellner [at] web.de> 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
Andreas Froede [ Mi, 26 Juli 2006 15:23 ] [ ID #1406113 ]
PHP » de.comp.lang.php.datenbanken » BETWEEN funktioniert nicht richtig...

Vorheriges Thema: Suchen in Verzeichnishierarchie
Nächstes Thema: Ein Bearbeiten-Formular erstellen