Odpowiedzi:
Zasadniczo, jak sortować i porównywać ciągi.
Przykłady:
Porównywanie:
Sortowanie:
Specjalna równoważność znaków
Niektóre SQL (SQL Server 2008+)
DECLARE @foo TABLE (bar varchar(2))
INSERT @foo VALUES ('z'), ('æ'), ('ø'), ('å'), ('ss'), ('ß'), ('a'), ('ä')
SELECT * FROM @foo ORDER BY bar COLLATE Finnish_Swedish_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Norwegian_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Latin1_General_100_CS_AS --german (western europe) and default
SELECT * FROM @foo ORDER BY bar COLLATE German_PhoneBook_100_CS_AS
„Sortowanie” najlepiej zdefiniować prawdopodobnie na etymology.com,
koniec 14c., „zebranie się i porównanie”
W ciągu ostatnich 600 lat nic się nie zmieniło. „zestawienie” oznacza „połączyć” i niezależnie od tego, czy jest to uporządkowanie książki, chronologicznie czy w inny sposób w bazie danych, wszystko jest takie samo.
Odnosząc się do informatyki, oddzielamy mechanizm przechowywania od zamawiania . Być może słyszałeś o ASCII-betical . Odnosi się to do porównania opartego na binarnym kodowaniu znaków ASCII. W tym systemie pamięć masowa i sortowanie są identyczne. Gdyby „kodowanie” standaryzowane przez ASCII kiedykolwiek zmieniło, „sortowanie” (kolejność) również by się zmieniło.
POSIX zaczął to przełamywać LC_COLLATE
. Ale kiedy przechodzimy do Unicode, powstało konsorcjum, które również ustandaryzowało sortowanie: ICU.
W specyfikacji SQL dostępne są dwa rozszerzenia zapewniające sortowanie,
F690
: „Obsługa sortowania:
Obejmuje collation name
, collation clause
, collation definition
i drop collation
.
F692
: Rozszerzona obsługa sortowania,
Obejmuje dołączenie innego domyślnego zestawienia do kolumny w schemacie.
Zasadniczo te zapewniają możliwość CREATE
i DROP
sortowania, aby określić je dla operatorów i rodzaju, oraz określenie wartości domyślnych dla kolumn.
Aby uzyskać więcej informacji o tym, co SQL ma do zaoferowania sprawdź,
Zamiast wkleić ograniczony przykład, oto pakiet testowy PostgreSQL, który jest dość obszerny. Sprawdź przynajmniej pierwszy link i poszukaj'Türkiye' COLLATE "tr-x-icu" ILIKE '%KI%' AS "false"
collate.icu.utf8.out
collate.linux.utf8.out
collate.out
Prawdopodobnie nie warto tego sprawdzać, ale umieściłem go tutaj dla kompletności, nudne kontrole POSIX.