2016-04-13 12 views
0

inet alanı olarak tanımlanan bir postgres veritabanında bir ip alanım var.ipv4 vs ipv6 adreslerini tanımlamak için yöntem

Şu anda, ipv4 vs ipv6'yı belirlemek için, bu noktaya göre kolon sayısı ve/veya '.' Kullanabilirim. Bir dereceye kadar sayın, ama daha iyi bir yol olmalı, değil mi?

COLON_COUNT = (length(ip::text) - length(replace(ip::text, ':', ''))); 
DOT_COUNT = (length(ip::text) - length(replace(ip::text, '.', ''))); 

Bir adres ipv4 veya ipv6 olup olmadığını belirlemek için temiz/iyi bir yol nedir?

+1

Sanırım takip eden sıfırlar kesilmediyse, alanı sadece bir sayıya dönüştürebilir ve numara 2 güçten daha az 32 IPv4 olup olmadığını görebilir (IPV6). Bu, sayı dönüşümünden önce nokta ve noktaların filtrelenmesi anlamına gelir. – weismat

+0

Bu iyi bir fikir! – monkut

cevap

4

family() function'u kullanın. IPv4 4'e dönecek, IPv6 geri dönecektir.

+0

harika, teşekkürler! O sayfaya bakıyordum ama bunu gözden kaçırdım. – monkut

1

Sondaki sıfırlar eksik değilse, alanı yalnızca bir sayıya dönüştürebilir ve sayı 2 güçten daha az 32 IPv4 olup olmadığını görebilir (IPV6).
Bu, sayı dönüşümünden önceki nokta ve noktaların filtrelenmesi anlamına gelir.

İlgili konular