Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird 2.1 SQL - case-sensitive? (https://www.delphipraxis.net/134000-firebird-2-1-sql-case-sensitive.html)

Grolle 13. Mai 2009 19:03

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBDac

Firebird 2.1 SQL - case-sensitive?
 
Hi,

ist die Suche bei Firebird in Varchar-Feldern immer case-sensitive? Kann man das irgendwie in der Abfrage umgehen?

Viele Grüße ...

mkinzler 13. Mai 2009 19:10

Re: Firebird 2.1 SQL - case-sensitive?
 
-Vorher beide Seiten der Abfrage in Großbuchstaben wandeln:
SQL-Code:
select * from <Tabelle> where Upper(<Feld>) = Upper( <Suchbegriff>);
-Expression Index

Grolle 13. Mai 2009 19:28

Re: Firebird 2.1 SQL - case-sensitive?
 
Zitat:

Zitat von mkinzler
-Vorher beide Seiten der Abfrage in Großbuchstaben wandeln...

hab ich's mir doch gedacht :stupid:

mkinzler 13. Mai 2009 19:42

Re: Firebird 2.1 SQL - case-sensitive?
 
Oder wenn du das öfterst benötigst einen Expression Index auf die Upper-Werte anlegen:
SQL-Code:
CREATE INDEX IDX_<Tabelle>_<Feld> ON <Tabelle> COMPUTED BY (UPPER (<Feld> COLLATE <Sortierung(Collation)>));

Grolle 13. Mai 2009 19:57

Re: Firebird 2.1 SQL - case-sensitive?
 
Hi,

jetzt habe ich aber doch noch ein Problem bei meiner Abfrage (s = string = gö):
SQL-Code:
SELECT LAST_NAME ||' + QuotedStr(', ') + '||FIRST_NAME AS TXT, ID, GENDER FROM CONTACTS WHERE UPPER(LAST_NAME) LIKE UPPER(''%' + s + '%'') AND STATE=1 ORDER BY LAST_NAME
Finden sollte er ja z. B. Göppert. Tut er aber nicht :gruebel:

TBx 13. Mai 2009 20:00

Re: Firebird 2.1 SQL - case-sensitive?
 
Welchen Charset verwendest Du denn? Sonderzeichen wie äöüß etc sind nicht in jedem Characterset enthalten.

mkinzler 13. Mai 2009 20:01

Re: Firebird 2.1 SQL - case-sensitive?
 
Was für eine COLLATION hast du angegeben?

TBx 13. Mai 2009 20:03

Re: Firebird 2.1 SQL - case-sensitive?
 
na, Herr Kollege, wollen da wieder zwei Dumme auf das selbe hinaus? @Markus

Grolle 13. Mai 2009 20:06

Re: Firebird 2.1 SQL - case-sensitive?
 
SQL-Code:
LAST_NAME Varchar(80) CHARACTER SET ISO8859_1
- sollte doch eigentlich klappen, oder?

Hansa 13. Mai 2009 20:12

Re: Firebird 2.1 SQL - case-sensitive?
 
Ich glaube kaum, dass so etwas "," Also genau diese drei Zeichen im Namen vorkommen. Wozu immer diese QuotedStr ? :wall: Das macht das Ganze, nebenbei gesagt, sowieso noch dazu case-sensitiv.

Edit es sind sogar 4 Zeichen, also ", ". 8)

Grolle 13. Mai 2009 20:33

Re: Firebird 2.1 SQL - case-sensitive?
 
Zitat:

Zitat von Hansa
Ich glaube kaum, dass so etwas "," Also genau diese drei Zeichen im Namen vorkommen. Wozu immer diese QuotedStr ? :wall: Das macht das Ganze, nebenbei gesagt, sowieso noch dazu case-sensitiv. Edit es sind sogar 4 Zeichen, also ", ". 8)

So klappts ja aber auch nicht:
SQL-Code:
SELECT LAST_NAME, ID, GENDER FROM CONTACTS WHERE UPPER(LAST_NAME) LIKE UPPER(''%' + s + '%'')
Charset und Collation sind beide ISO8859_1 :?

Hansa 13. Mai 2009 20:54

Re: Firebird 2.1 SQL - case-sensitive?
 
Du kommst nicht drumrum, das SelectSQL.Text anzeigen zu lassen. ShowMessage etc. Dann würde man wohl direkt sehen, wo der Haken ist. Die QuotedStr für das , machen eventuell noch nicht mal was. Aber du verkettest das ja u.a. mit Firstname. Weiß der Teufel, was da im Endeffekt dabei rauskommt. Wenn der ganze Ausdruck durch die "" case-sensitiv wird, wie vermutet, na dann ist alles klar. :twisted: Öffne mal die DB im IBExpert und gucke, wie die aussieht. Bei mir in der DB ist jedenfalls von " nirgendwo was zu sehen und im Source wirst du kein QuotedStr finden.

Grolle 13. Mai 2009 20:58

Re: Firebird 2.1 SQL - case-sensitive?
 
Hi,

habe es jetzt so getauscht und das klappt!?!:
SQL-Code:
... WHERE UPPER(LAST_NAME) LIKE ''%' + AnsiUpperCase(s) + '%'' AND STATE=1 ORDER BY LAST_NAME'
Jetzt werde ich das mal parametrisieren :mrgreen:

Viele Grüße ...

mkinzler 13. Mai 2009 21:09

Re: Firebird 2.1 SQL - case-sensitive?
 
Ich würde statt
SQL-Code:
LIKE '%<Suchstring>%'
noch
SQL-Code:
CONTAINING '<Suchstring>'
nehmen

Grolle 13. Mai 2009 21:15

Re: Firebird 2.1 SQL - case-sensitive?
 
Damit könnte ich aber keine % innerhalb des Suchstrings platzieren, oder? Also
SQL-Code:
LIKE '%<Such%ring>%'
Viele Grüße ...

mkinzler 13. Mai 2009 21:19

Re: Firebird 2.1 SQL - case-sensitive?
 
Zitat:

Zitat von Grolle
Damit könnte ich aber keine % innerhalb des Suchstrings platzieren, oder? Also
SQL-Code:
LIKE '%<Such%ring>%'
Viele Grüße ...

Brauchst man auch nicht, da der Suchsstring an beliebiger Stelle des Feldes stehen kann

Hansa 13. Mai 2009 21:30

Re: Firebird 2.1 SQL - case-sensitive?
 
Gibt es einen wichtigen Vorteil, CONTAINING zu verwenden ? Sehe gerade, dass bei mir an solchen Stellen noch LIKE %XY% steht. @Grolle : da stimmt trotzdem was nicht. Mache diese verfluchten QuotedStr endlich weg. :mrgreen:

mkinzler 13. Mai 2009 21:33

Re: Firebird 2.1 SQL - case-sensitive?
 
Zitat:

Gibt es einen wichtigen Vorteil, CONTAINING zu verwenden ?
Ja man kann auf die % verzichten

Hansa 13. Mai 2009 21:35

Re: Firebird 2.1 SQL - case-sensitive?
 
Jo, echt sehr wichtig. :mrgreen:

Grolle 13. Mai 2009 21:39

Re: Firebird 2.1 SQL - case-sensitive?
 
Zitat:

Zitat von mkinzler
Ja man kann auf die % verzichten

Die sind aber für den in #15 genannten Suchstring hilfreich :zwinker:

mkinzler 13. Mai 2009 21:40

Re: Firebird 2.1 SQL - case-sensitive?
 
Wenn man den Suchbegriff aus einem Edit o.ä. zieht oder eine Abfrage zur Laufzeit zusammensetzt kann das die Sache schon sehr erleichtern
Zitat:

Die sind aber für den in #15 genannten Suchstring hilfreich Zwinkern
SQL-Code:
LIKE '%<Such%ring>%'
ist aquivalent zu
SQL-Code:
CONTAINING '<Such'

TBx 13. Mai 2009 22:37

Re: Firebird 2.1 SQL - case-sensitive?
 
Zitat:

Zitat von Hansa
Gibt es einen wichtigen Vorteil, CONTAINING zu verwenden ?

jep, CONTAINING ist nicht case sensitiv :-)

SQL-Code:
WHERE UPPER (FELD) LIKE UPPER ('%TBx%')
ist das gleiche wie
SQL-Code:
WHERE FELD CONTAINING 'TBx'

schlecki 29. Mär 2011 10:37

AW: Re: Firebird 2.1 SQL - case-sensitive?
 
Ich weiß, dieser Beitrag ist schon älter als 2 Jahre - bin über Google drüber gestolpert und die nachfolgende Aussage stimmt so nicht (mehr?):

Zitat:

Zitat von mkinzler (Beitrag 912772)
SQL-Code:
LIKE '%<Such%ring>%'
ist aquivalent zu
SQL-Code:
CONTAINING '<Such'

folgender SQL-Befehl
SQL-Code:
select '1', S.BEZEICHNG from STATUS S where S.BEZEICHNG like '%app%p%'
union
select '2', S.BEZEICHNG from STATUS S where S.BEZEICHNG containing ('app')
liefert folgendes Ergebnis:
Code:
CONSTANT   BEZEICHNG
1          approved preliminary
2          approved
2          approved preliminary
2          approved under conditions
Nur, falls nochmal jemand drüber stolpert ;)

DeddyH 29. Mär 2011 10:47

AW: Firebird 2.1 SQL - case-sensitive?
 
Wenn man das einmal in Deutsch übersetzt, ist es klar, dass das nicht dasselbe sein kann.
SQL-Code:
select '1', S.BEZEICHNG from STATUS S where S.BEZEICHNG like '%app%p%'
--> Alle Datensätze, in deren BEZEICHNG "app" und irgendwo dahinter noch "p" vorkommt.
SQL-Code:
select '2', S.BEZEICHNG from STATUS S where S.BEZEICHNG containing ('app')
--> Alle Datensätze, deren BEZEICHNG "app" enthält

Sir Rufo 29. Mär 2011 11:35

AW: Re: Firebird 2.1 SQL - case-sensitive?
 
Zitat:

Zitat von mkinzler (Beitrag 912772)
SQL-Code:
LIKE '%<Such%ring>%'
ist aquivalent zu
SQL-Code:
CONTAINING '<Such'

diese Aussage war, ist und wird falsch bleiben

so ist die Aussage richtig:
SQL-Code:
LIKE '%<Such%'
ist aquivalent zu
SQL-Code:
CONTAINING '<Such'
Wobei die Betrachtung ob Case-Sensitiv oder nicht mal ausser acht gelassen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz