2010-08-02 14 views
19

mam tej bazy danych:SQL Server odpytuje sprawa wrażliwość

abcDEF 

ABCdef 

abcdef 

jeśli piszę: select * from MyTbl where A='ABCdef'

jak dostać: ABCdef

i jak je zdobyć:

abcDEF 

    ABCdef 

    abcdef 

Z góry dzięki

Nie zapomniałem napisać - sqlCE

+3

UPPERCASE/Lowecase, nie duży/mały. – Oded

Odpowiedz

32

Możesz dokonać wrażenia na wielkość liter przy użyciu słowa kluczowego COLLATE.

SELECT A 
FROM MyTbl 
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef' 
+0

dziękuję za pomoc, jak to zrobić na sqlCE? – Gold

1

SQL nie jest rozróżniana domyślnie, więc będzie można uzyskać wszystkie trzy elementy, czy wykonanie prostego porównania ciągów. Aby to wielkość liter, można rzutować wartość pola i swoją wartość wyszukiwania jako varbinary:

SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20)) 

Powyższe zakłada swoje pole varchar ma wymiary w 20. nvarchar podwoić go (dzięki @ ps2goat).

+2

-1 Whow. To jest najgorsza możliwa odpowiedź - usuń wszystkie indeksy, wymuszaj skanowanie tabeli i całkowicie ignoruj ​​rzeczywistość możliwości zmiany sortowania;) – TomTom

+3

@TomTom - użycie 'COLLATE' oznacza, że ​​indeksy i tak nie będą używane. –

+2

Jestem pewien, że istnieją gorsze odpowiedzi - to zapytanie przynajmniej funkcjonuje. Z mojego rozumowania nie ma sposobu na określenie indeksowania wielkości liter przy użyciu indeksów, chyba że robisz porównanie binarne. Nigdy go nie wypróbowałem, ale jeśli twoja kolumna tabeli została zdefiniowana jako VARBINARY, możesz zrobić na niej indeks i musisz tylko rzucić swój łańcuch wyszukiwania. –

6

Jeśli masz abcDEF, ABCdef, abcdef już w bazie danych, to jest już rozróżniana wielkość liter lub nie masz ograniczenia.

Trzeba dodać COLLATE po obu stronach, aby upewnić się, że rzeczywiście wielkość liter (na razie nie czuły bazy danych), które będą naruszały Wykorzystanie indeksu

SELECT TheColumn 
FROM MyTable 
WHERE TheColumn COLLATE Latin1_General_CS_AS = 'ABCdef' COLLATE Latin1_General_CS_AS 

Co o akcentami też? Latin1_General_CS_AI, Latin1_General_Bin?

1

Spróbuj tego wystarczy dodać słowa kluczowego binarnego po where:

select * from MyTbl where binary A = 'ABCdef';