2016-04-13 16 views
0

私はinetフィールドとして定義されたpostgresデータベースにipフィールドを持っています。ipv4とipv6のアドレスを区別する方法

現時点では、ipv4とipv6を判別するために、コロンカウントと/または '。'を使用することができます。ある程度までは数えますが、より良い方法が必要です。

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

アドレスがipv4かipv6かどうかを判断するにはどうすればよいですか?

+1

後ろの0を省略しないと、フィールドを数値に変換し、その数値が2のべき乗以下であるかどうかを確認できます(IPV6)。これは、数値変換の前にコロンとドットをフィルタリングすることを意味します。 – weismat

+0

これは良いアイデアです! – monkut

答えて

4

family() functionを使用してください。 IPv4は4を返し、IPv6は6を返します。

+0

素晴らしい、ありがとう!私はそのページを見ていましたが、私はこれを見落としました。 – monkut

1

私は、後ろのゼロが省略されていない場合は、フィールドを数値に変換し、数値が2のべき乗以下であるかどうかを確認することができます(IPV6)。
これは、数値変換の前にコロンとドットをフィルタリングすることを意味します。

関連する問題