# nur nach kleingeschriebenen Einträgen suchen



## Aenex (17. Juli 2007)

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


----------



## lmarkus31 (17. Juli 2007)

Hallo,

ungetestet:


```
SELECT * from tabelle WHERE lower(spalte) = spalte;
```

Markus


----------



## Aenex (17. Juli 2007)

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....


----------



## Aenex (17. Juli 2007)

kann ich das ganze vielleicht mit like binary realisieren?


----------



## lmarkus31 (17. Juli 2007)

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).


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

Markus


----------



## Aenex (17. Juli 2007)

Gibt es noch eine Möglichkeit das ganze über like zu machen?

irgendwas mit like [a-z] ?


----------



## SeeKing (18. Juli 2007)

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...


----------



## lmarkus31 (18. Juli 2007)

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.


```
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:


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

Markus


----------

