[PL] Sortowanie adresów IP w SQL Server 2008
Swego czasu znany na całym świecie ekspert Itzik Ben-Gan (SQL Server MVP) opublikował na łamach SQL Server Magazine artykuł poświęcony problemowi sortowania adresów IP za pomocą zapytań T-SQL. Jednym z ciekawszych rozwiązań było wykorzystanie funkcji PARSENAME. SQL Server 2008 daje jeszcze jedną interesującą możliwość wykonywania operacji sortowania danych, w których liczby całkowite są przedzielone dowolnym separatorem. Przykład:
SELECT *
FROM (
VALUES
('192.168.0.1'),
('192.168.0.10'),
('192.168.0.11'),
('127.0.0.1'),
('10.0.0.1'),
('9.0.0.1'),
('30.77.120.1')
) AS T(IP)
ORDER BY CAST('/' + T.IP + '/' AS hierarchyid)
Wynik:
IP
------------
9.0.0.1
10.0.0.1
30.77.120.1
127.0.0.1
192.168.0.1
192.168.0.10
192.168.0.11
Rzutowanie adresu IP z doklejonymi z obu stron ukośnikami na nowy typ hierarchyid załatwia sprawę :-)
Pomysł na zastosowanie tego patentu okazał się – póki co - jednym z ciekawszych rozwiązań zagadki T-SQL Sorting Challenge opublikowanej przez wspomnianego Itzika Ben-Gana (byłem jedną z osób, która podała takie rozwiązanie). Oczywiście, powyższego rozwiązania nie da się zastosować na starszych wersja SQL Servera.