Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

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

Opublikowane 2 września 2008 22:50 przez brejk

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

# re: [PL] Sortowanie adresów IP w SQL Server 2008

4 września 2008 09:34 by Grzesio

Jakąś opcją (marną) na porządek w adresach IP jest dopisanie wiodących zer w każdym z oktetów. Na przykład 010.011.012.013. Kiedyś spróbowałem to zrobić i okazało się, że ping traktuje taki zapis jako liczby ósemkowe... Ot taki feature niezmienny od Windows 95 chyba ;)

# re: [PL] Sortowanie adresów IP w SQL Server 2008

4 września 2008 10:51 by brejk

@Grzesio: Dla adresó IP to jest ok. W zagadce Itzika były też liczby ujemne :-) Poza tym ta metoda z hierarchyid jest dobra dla wszystkich formatów, w których liczby całkowite są oddzielone jakimś separatorem (robisz REPLACE separatora na kropkę i już).

Co o tym myślisz?

(wymagane) 
wymagane 
(wymagane) 

  
Wprowadź kod: (wymagane)

About brejk

MVP, MCT, SQL Server geek