nur nach kleingeschriebenen Einträgen suchen

Aenex

Grünschnabel
Hallo Ihr lieben,

nach ewig langem, erfolglosen googeln habe ich mich entschlossen mein Problem mal hier vorzutragen.

Ich suche eine Möglichkeit aus einer Spalte nur einträge abzufragen die klein geschrieben sind. (es sind nur 2 Arten vorhanden, entweder alles gross geschrieben oder alles klein geschrieben, also entweder ABCD oder abcd)

upper und lower hat mich nicht weiter gebracht da nur konvertiert wird.

Es handelt sich in meinem Fall um eine MS-SQL Datenbank.

MfG

Andreas
 
Danke für die schnelle Antwort, bringt mich allerdings nicht weiter da mir immer noch alle Einträge mit gross und kleinbuchstaben angezeigt werden... :-(
ist das überhaupt machbar?
hab vorhin irgendwo gelesen das ms-sql kein unterschied zwischen gross und kleinbuchstaben macht....
 
Ok,

dann hat es wohl was mit dem Collation-Settings zu tun.
Entweder du definierst deine Tabellen bzw. deine Spalten mit den entsprechenden Collation-Settings um oder du versuchst es direkt im T-SQL:

http://msdn2.microsoft.com/en-us/library/ms180175.aspx

Also eventuell so deinen Vergleich erzwingen (ungetestet).

SQL:
SELECT * FROM tabelle
WHERE spalte COLLATE SQL_Latin1_General_CP850_CS_AS =
             lower(spalte COLLATE SQL_Latin1_General_CP850_CS_AS)

Markus
 
Also mit MS-SQL kenne ich mich nicht so gut aus. Aber um es Quick & Dirty zu machen. Wenn alle Stricke reisen wandel alles in ASCII werte um und schau ob die Werte nur kleinbuchstaben enthalten (Werte 97 - 122). Kein schöner Weg aber einer der geht. Bei ORACLE würde ich jetzt das gute alte BIN_COMPARE auspacken... aber bei MS SQL muss ich da leider passen...
 
Hallo,

mit LIKE wird es nicht funktionieren, da [a-z] nur jeweils auf 1 Charakter prüft und du den Rest dann wahrscheinlich wieder mit Wildcards prüfen wirst, was aber nicht die richtigen Ergebnisse bringt.
Echte Regex würden hier wahrscheinlich helfen..

Du möchtest aber sicherstellen dass der ganze String lowercase ist (wenn ich dich richtig verstanden habe).

Was du machen kannst, um mein obiges Statement aus dem 1.Post nehmen zu können:

1. Ändern der Datenbank-Spalte und der Collate-Settings.

SQL:
ALTER TABLE <tabelle> 
  ALTER COLUMN <spalte> varchar(20) 
  COLLATE SQL_Latin1_General_CP850_CS_AS;

und dann eben nur noch:

2.Prüfen, ob es funktioniert:

SQL:
SELECT *
  from <tabelle>
 WHERE spalte = LOWER(spalte)

Markus
 

Neue Beiträge

Zurück