IP 주소 함수
IP 주소 함수 (IP Address Functions)
IPv4/IPv6 주소를 문자열·정수·바이너리(FixedString(16)) 형태로 서로 변환하고, CIDR 범위 계산, 주소 형식 검증, 문자열 검색용 표기 변환 등을 제공하는 함수들이에요.
출처: 문서
본문
IPv4CIDRToRange
도입: v20.1.0
IPv4 주소와 CIDR(Classless Inter-Domain Routing) 프리픽스 길이를 받아, 해당 서브넷의 주소 범위를 두 개의 IPv4 값(첫 번째와 마지막 주소)으로 이뤄진 튜플로 반환해요. IPv6 버전은 IPv6CIDRToRange를 참고하세요.
구문 (Syntax)
IPv4CIDRToRange(ipv4, cidr)
인자 (Arguments)
ipv4— IPv4 주소.IPv4또는Stringcidr— CIDR 값.UInt8
반환 값 (Returned value)
서브넷 범위를 나타내는 두 IPv4 주소의 튜플을 반환해요. Tuple(IPv4, IPv4)
예시 (Examples)
SELECT IPv4CIDRToRange(toIPv4('192.168.5.2'), 16);
┌─IPv4CIDRToRange(toIPv4('192.168.5.2'), 16)─┐
│ ('192.168.0.0','192.168.255.255') │
└────────────────────────────────────────────┘
IPv4NumToString
도입: v1.1.0
32비트 정수를 점으로 구분된 10진수 표기(A.B.C.D 형식)의 IPv4 주소 문자열로 변환해요. 입력은 빅엔디안 바이트 순서로 해석해요.
구문 (Syntax)
IPv4NumToString(num)
별칭 (Aliases): INET_NTOA
인자 (Arguments)
num— UInt32 숫자로 표현한 IPv4 주소.UInt32
반환 값 (Returned value)
MAC 주소를 나타내는 숫자, 또는 형식이 유효하지 않으면 0을 반환해요. String
예시 (Examples)
SELECT IPv4NumToString(3232235521)
192.168.0.1
IPv4NumToStringClassC
도입: v1.1.0
32비트 정수를 점으로 구분된 10진수 표기(A.B.C.D 형식)의 IPv4 주소 문자열로 변환해요. IPv4NumToString과 비슷하지만 마지막 옥텟 대신 xxx를 사용해요.
구문 (Syntax)
IPv4NumToStringClassC(num)
인자 (Arguments)
num— UInt32 숫자로 표현한 IPv4 주소.UInt32
반환 값 (Returned value)
마지막 옥텟이 xxx로 바뀐 IPv4 주소 문자열을 반환해요. String
예시 (Examples)
집계를 포함한 기본 예시
SELECT
IPv4NumToStringClassC(ClientIP) AS k,
count() AS c
FROM VALUES('ClientIP UInt32',
(toUInt32(toIPv4('83.149.9.10'))), (toUInt32(toIPv4('83.149.9.11'))), (toUInt32(toIPv4('83.149.9.12'))),
(toUInt32(toIPv4('217.118.81.5'))), (toUInt32(toIPv4('217.118.81.6'))),
(toUInt32(toIPv4('213.87.129.1'))))
GROUP BY k
ORDER BY c DESC, k
┌─k──────────────┬─c─┐
│ 83.149.9.xxx │ 3 │
│ 217.118.81.xxx │ 2 │
│ 213.87.129.xxx │ 1 │
└────────────────┴───┘
IPv4StringToNum
도입: v1.1.0
점으로 구분된 10진수 표기(A.B.C.D 형식)의 IPv4 주소 문자열을 대응하는 32비트 정수로 변환해요. (IPv4NumToString의 역연산) IPv4 주소 형식이 유효하지 않으면 예외를 던져요.
구문 (Syntax)
IPv4StringToNum(string)
별칭 (Aliases): INET_ATON
인자 (Arguments)
string— IPv4 주소 문자열.String
반환 값 (Returned value)
IPv4 주소를 반환해요. UInt32
예시 (Examples)
SELECT IPv4StringToNum('192.168.0.1')
3232235521
IPv4StringToNumOrDefault
도입: v22.3.0
점으로 구분된 10진수 표기(A.B.C.D 형식)의 IPv4 주소 문자열을 대응하는 32비트 정수로 변환하지만, IPv4 주소 형식이 유효하지 않으면 0을 반환해요.
구문 (Syntax)
IPv4StringToNumOrDefault(string)
인자 (Arguments)
string— IPv4 주소 문자열.String
반환 값 (Returned value)
IPv4 주소, 또는 유효하지 않으면 0. UInt32
예시 (Examples)
유효하지 않은 주소 예시
SELECT
IPv4StringToNumOrDefault('127.0.0.1') AS valid,
IPv4StringToNumOrDefault('invalid') AS invalid;
┌──────valid─┬─invalid─┐
│ 2130706433 │ 0 │
└────────────┴─────────┘
IPv4StringToNumOrNull
도입: v22.3.0
점으로 구분된 10진수 표기(A.B.C.D 형식)의 IPv4 주소 문자열을 대응하는 32비트 정수로 변환하지만, IPv4 주소 형식이 유효하지 않으면 NULL을 반환해요.
구문 (Syntax)
IPv4StringToNumOrNull(string)
인자 (Arguments)
string— IPv4 주소 문자열.String
반환 값 (Returned value)
IPv4 주소, 또는 유효하지 않으면 NULL. Nullable(UInt32)
예시 (Examples)
유효하지 않은 주소 예시
SELECT
IPv4StringToNumOrNull('127.0.0.1') AS valid,
IPv4StringToNumOrNull('invalid') AS invalid;
┌──────valid─┬─invalid─┐
│ 2130706433 │ ᴺᵁᴸᴸ │
└────────────┴─────────┘
IPv4ToIPv6
도입: v1.1.0
(빅엔디안) 32비트 숫자를 IPv4 주소로 해석한 뒤, 이를 FixedString(16) 형식의 대응하는 IPv6 주소로 해석해요.
구문 (Syntax)
IPv4ToIPv6(x)
인자 (Arguments)
x— IPv4 주소.UInt32
반환 값 (Returned value)
바이너리 형식의 IPv6 주소를 반환해요. FixedString(16)
예시 (Examples)
SELECT IPv6NumToString(IPv4ToIPv6(IPv4StringToNum('192.168.0.1'))) AS addr;
┌─addr───────────────┐
│ ::ffff:192.168.0.1 │
└────────────────────┘
IPv6CIDRToRange
도입: v20.1.0
IPv6 주소와 CIDR 프리픽스 길이를 받아, 해당 서브넷의 주소 범위를 두 개의 IPv6 값(최저·최고 주소)으로 이뤄진 튜플로 반환해요. IPv4 버전은 IPv4CIDRToRange를 참고하세요.
구문 (Syntax)
IPv6CIDRToRange(ipv6, cidr)
인자 (Arguments)
ipv6— IPv6 주소.IPv6또는Stringcidr— CIDR 값.UInt8
반환 값 (Returned value)
서브넷 범위를 나타내는 두 IPv6 주소의 튜플을 반환해요. Tuple(IPv6, IPv6)
예시 (Examples)
SELECT IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32);
┌─IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32)─┐
│ ('2001:db8::','2001:db8:ffff:ffff:ffff:ffff:ffff:ffff') │
└────────────────────────────────────────────────────────────────────────┘
IPv6NumToString
도입: v1.1.0
바이너리 형식(FixedString(16))의 IPv6 주소를 표준 텍스트 표기로 변환해요. IPv4로 매핑된 IPv6 주소는 ::ffff:111.222.33.44 형식으로 표시돼요.
구문 (Syntax)
IPv6NumToString(x)
별칭 (Aliases): INET6_NTOA
인자 (Arguments)
x— 바이너리 형식의 IPv6 주소.FixedString(16)또는IPv6
반환 값 (Returned value)
텍스트 형식의 IPv6 주소 문자열을 반환해요. String
예시 (Examples)
SELECT IPv6NumToString(toFixedString(unhex('2A0206B8000000000000000000000011'), 16)) AS addr;
┌─addr─────────┐
│ 2a02:6b8::11 │
└──────────────┘
IPv6 도달 분석
CREATE TABLE hits_all (EventDate Date, ClientIP6 FixedString(16)) ENGINE = Memory;
INSERT INTO hits_all SELECT today(), IPv6StringToNum(addr) FROM VALUES('addr String',
('2a02:2168:aaa:bbbb::2'), ('2a02:2168:aaa:bbbb::2'), ('2a02:2168:aaa:bbbb::2'),
('2a02:6b8:0:fff::ff'), ('2a02:6b8:0:fff::ff'),
('::ffff:94.26.111.111'), ('::ffff:94.26.111.111'), ('::ffff:94.26.111.111'), ('::ffff:94.26.111.111'),
('::ffff:37.143.222.4'));
-- IPv6 공간으로 매핑된 IPv4 주소가 아닌 주소.
SELECT
IPv6NumToString(ClientIP6 AS k),
count() AS c
FROM hits_all
WHERE EventDate = today() AND substring(ClientIP6, 1, 12) != unhex('00000000000000000000FFFF')
GROUP BY k
ORDER BY c DESC, k
LIMIT 10
┌─IPv6NumToString(k)────┬─c─┐
│ 2a02:2168:aaa:bbbb::2 │ 3 │
│ 2a02:6b8:0:fff::ff │ 2 │
└───────────────────────┴───┘
IPv6 매핑된 IPv4 주소
-- 필터 없이는 매핑된 IPv4 주소도 함께 나타난다.
SELECT
IPv6NumToString(ClientIP6 AS k),
count() AS c
FROM hits_all
WHERE EventDate = today()
GROUP BY k
ORDER BY c DESC, k
LIMIT 10
┌─IPv6NumToString(k)────┬─c─┐
│ ::ffff:94.26.111.111 │ 4 │
│ 2a02:2168:aaa:bbbb::2 │ 3 │
│ 2a02:6b8:0:fff::ff │ 2 │
│ ::ffff:37.143.222.4 │ 1 │
└───────────────────────┴───┘
IPv6StringToNum
도입: v1.1.0
표준 텍스트 표기의 IPv6 주소를 바이너리 형식(FixedString(16))으로 변환해요. ::ffff:111.222.33.44. 형식의 IPv4 매핑 IPv6 주소를 받을 수 있어요. IPv6 주소 형식이 유효하지 않으면 예외를 던져요.
입력 문자열이 유효한 IPv4 주소를 담고 있으면 해당하는 IPv6 주소를 반환해요. HEX는 대문자·소문자 모두 가능해요.
구문 (Syntax)
IPv6StringToNum(string)
별칭 (Aliases): INET6_ATON
인자 (Arguments)
string— IPv6 주소 문자열.String
반환 값 (Returned value)
바이너리 형식의 IPv6 주소를 반환해요. FixedString(16)
예시 (Examples)
기본 예시
SELECT addr, cutIPv6(IPv6StringToNum(addr), 0, 0) FROM (SELECT ['127.0.0.1', '1111::ffff'] AS addr) ARRAY JOIN addr;
┌─addr───────┬─cutIPv6(IPv6StringToNum(addr), 0, 0)─┐
│ 127.0.0.1 │ ::ffff:127.0.0.1 │
│ 1111::ffff │ 1111::ffff │
└────────────┴──────────────────────────────────────┘
IPv6StringToNumOrDefault
도입: v22.3.0
표준 텍스트 표기의 IPv6 주소를 바이너리 형식(FixedString(16))으로 변환해요. ::ffff:111.222.33.44. 형식의 IPv4 매핑 IPv6 주소를 받을 수 있어요. IPv6 주소 형식이 유효하지 않으면 기본값 ::을 반환해요.
구문 (Syntax)
IPv6StringToNumOrDefault(string)
인자 (Arguments)
string— IPv6 주소 문자열.String
반환 값 (Returned value)
바이너리 형식의 IPv6 주소, 또는 유효하지 않으면 0으로 채워진 FixedString(16). FixedString(16)
예시 (Examples)
유효하지 않은 주소를 포함한 기본 예시
SELECT
IPv6NumToString(IPv6StringToNumOrDefault('2001:db8::1')) AS valid,
IPv6NumToString(IPv6StringToNumOrDefault('invalid')) AS invalid;
┌─valid───────┬─invalid─┐
│ 2001:db8::1 │ :: │
└─────────────┴─────────┘
IPv6StringToNumOrNull
도입: v22.3.0
표준 텍스트 표기의 IPv6 주소를 바이너리 형식(FixedString(16))으로 변환해요. ::ffff:111.222.33.44. 형식의 IPv4 매핑 IPv6 주소를 받을 수 있어요. IPv6 주소 형식이 유효하지 않으면 NULL을 반환해요.
구문 (Syntax)
IPv6StringToNumOrNull(string)
인자 (Arguments)
string— IPv6 주소 문자열.String
반환 값 (Returned value)
바이너리 형식의 IPv6 주소, 또는 유효하지 않으면 NULL. Nullable(FixedString(16))
예시 (Examples)
유효하지 않은 주소를 포함한 기본 예시
SELECT
IPv6NumToString(IPv6StringToNumOrNull('2001:db8::1')) AS valid,
IPv6StringToNumOrNull('invalid') AS invalid;
┌─valid───────┬─invalid─┐
│ 2001:db8::1 │ ᴺᵁᴸᴸ │
└─────────────┴─────────┘
cutIPv6
도입: v1.1.0
바이너리 형식으로 IPv6 주소를 담은 FixedString(16) 값을 받아, 지정된 바이트 수만큼 잘라낸 주소를 텍스트 형식으로 담은 문자열을 반환해요.
구문 (Syntax)
cutIPv6(x, bytesToCutForIPv6, bytesToCutForIPv4)
인자 (Arguments)
x— 바이너리 형식의 IPv6 주소.FixedString(16)또는IPv6bytesToCutForIPv6— IPv6에서 잘라낼 바이트 수.UInt8bytesToCutForIPv4— IPv4에서 잘라낼 바이트 수.UInt8
반환 값 (Returned value)
지정한 바이트가 제거된 텍스트 형식의 IPv6 주소를 담은 문자열을 반환해요. String
예시 (Examples)
WITH
IPv6StringToNum('2001:0DB8:AC10:FE01:FEED:BABE:CAFE:F00D') AS ipv6,
IPv4ToIPv6(IPv4StringToNum('192.168.0.1')) AS ipv4
SELECT
cutIPv6(ipv6, 2, 0),
cutIPv6(ipv4, 0, 2)
┌─cutIPv6(ipv6, 2, 0)─────────────────┬─cutIPv6(ipv4, 0, 2)─┐
│ 2001:db8:ac10:fe01:feed:babe:cafe:0 │ ::ffff:192.168.0.0 │
└─────────────────────────────────────┴─────────────────────┘
isIPAddressInRange
도입: v21.4.0
IP 주소가 CIDR(Classless Inter-Domain Routing) 표기로 표현된 네트워크 안에 포함되는지를 판별해요.
이 함수는 IPv4와 IPv6 주소(및 네트워크)를 모두 문자열로 받아들여요. 주소와 CIDR의 IP 버전이 일치하지 않으면 0을 반환해요.
구문 (Syntax)
isIPAddressInRange(address, prefix)
인자 (Arguments)
address— IPv4 또는 IPv6 주소.Stringprefix— CIDR 표기의 IPv4 또는 IPv6 네트워크 프리픽스.String
반환 값 (Returned value)
주소와 CIDR의 IP 버전이 일치하면 1, 그렇지 않으면 0을 반환해요. UInt8
예시 (Examples)
범위 안의 IPv4 주소
SELECT isIPAddressInRange('127.0.0.1', '127.0.0.0/8')
1
범위 밖의 IPv4 주소
SELECT isIPAddressInRange('127.0.0.1', 'ffff::/16')
0
범위 밖의 IPv6 주소
SELECT isIPAddressInRange('::ffff:192.168.0.1', '::ffff:192.168.0.4/128')
0
isIPv4String
도입: v21.1.0
입력 문자열이 IPv4 주소인지 여부를 판별해요. IPv6 버전은 isIPv6String을 참고하세요.
구문 (Syntax)
isIPv4String(string)
인자 (Arguments)
string— 검사할 IP 주소 문자열.String
반환 값 (Returned value)
string이 IPv4 주소면 1, 아니면 0. UInt8
예시 (Examples)
SELECT addr, isIPv4String(addr)
FROM(
SELECT ['0.0.0.0', '127.0.0.1', '::ffff:127.0.0.1'] AS addr
)
ARRAY JOIN addr;
┌─addr─────────────┬─isIPv4String(addr)─┐
│ 0.0.0.0 │ 1 │
│ 127.0.0.1 │ 1 │
│ ::ffff:127.0.0.1 │ 0 │
└──────────────────┴────────────────────┘
isIPv6String
도입: v21.1.0
입력 문자열이 IPv6 주소인지 여부를 판별해요. IPv4 버전은 isIPv4String을 참고하세요.
구문 (Syntax)
isIPv6String(string)
인자 (Arguments)
string— 검사할 IP 주소 문자열.String
반환 값 (Returned value)
string이 IPv6 주소면 1, 아니면 0. UInt8
예시 (Examples)
SELECT addr, isIPv6String(addr)
FROM(SELECT ['::', '1111::ffff', '::ffff:127.0.0.1', '127.0.0.1'] AS addr)
ARRAY JOIN addr;
┌─addr─────────────┬─isIPv6String(addr)─┐
│ :: │ 1 │
│ 1111::ffff │ 1 │
│ ::ffff:127.0.0.1 │ 1 │
│ 127.0.0.1 │ 0 │
└──────────────────┴────────────────────┘
toIPv4
도입: v20.1.0
문자열 또는 UInt32 형태의 IPv4 주소를 IPv4 타입으로 변환해요. IPv4StringToNum과 IPv4NumToString 함수와 비슷하지만, 입력 인자로 문자열과 부호 없는 정수 타입을 모두 받아요.
구문 (Syntax)
toIPv4(x)
인자 (Arguments)
x— IPv4 주소.String또는UInt8/16/32
반환 값 (Returned value)
IPv4 주소를 반환해요. IPv4
예시 (Examples)
SELECT toIPv4('171.225.130.45');
┌─toIPv4('171.225.130.45')─┐
│ 171.225.130.45 │
└──────────────────────────┘
IPv4StringToNum, IPv4NumToString 함수와의 비교
WITH
'171.225.130.45' AS IPv4_string
SELECT
hex(IPv4StringToNum(IPv4_string)),
hex(toIPv4(IPv4_string))
┌─hex(IPv4StringToNum(IPv4_string))─┬─hex(toIPv4(IPv4_string))─┐
│ ABE1822D │ ABE1822D │
└───────────────────────────────────┴──────────────────────────┘
정수에서 변환
SELECT toIPv4(2130706433);
┌─toIPv4(2130706433)─┐
│ 127.0.0.1 │
└────────────────────┘
toIPv4OrDefault
도입: v22.3.0
문자열 또는 UInt32 형태의 IPv4 주소를 IPv4 타입으로 변환해요. IPv4 주소 형식이 유효하지 않으면 0.0.0.0(0 IPv4), 또는 제공한 IPv4 기본값을 반환해요.
구문 (Syntax)
toIPv4OrDefault(string[, default])
인자 (Arguments)
string— 변환할 IP 주소 문자열.Stringdefault— 선택 사항.string이 유효하지 않은 IPv4 주소일 때 반환할 값.IPv4
반환 값 (Returned value)
현재 IPv4 주소로 변환된 문자열, 또는 변환에 실패하면 기본값. IPv4
예시 (Examples)
유효/무효 IPv4 문자열
WITH
'192.168.1.1' AS valid_IPv4_string,
'999.999.999.999' AS invalid_IPv4_string,
'not_an_ip' AS malformed_string
SELECT
toIPv4OrDefault(valid_IPv4_string) AS valid,
toIPv4OrDefault(invalid_IPv4_string) AS default_value,
toIPv4OrDefault(malformed_string, toIPv4('8.8.8.8')) AS provided_default;
┌─valid───────┬─default_value─┬─provided_default─┐
│ 192.168.1.1 │ 0.0.0.0 │ 8.8.8.8 │
└─────────────┴───────────────┴──────────────────┘
toIPv4OrNull
도입: v22.3.0
입력 값을 IPv4 타입 값으로 변환하지만, 오류가 있으면 NULL을 반환해요. 변환 오류 시 예외를 던지는 대신 NULL을 반환한다는 점 외에는 toIPv4OrDefault와 같아요.
지원되는 인자:
- 점으로 구분된 10진수 표기의 IPv4 주소 문자열.
- IPv4 주소의 정수 표현.
지원되지 않는 인자(NULL 반환):
- 유효하지 않은 IP 주소 형식.
- IPv6 주소.
- 범위를 벗어난 값.
- 잘못된 형식의 주소.
구문 (Syntax)
toIPv4OrNull(x)
인자 (Arguments)
x— IPv4 주소의 문자열 또는 정수 표현.String또는Integer
반환 값 (Returned value)
성공하면 IPv4 주소, 그렇지 않으면 NULL. IPv4 또는 NULL
예시 (Examples)
SELECT
toIPv4OrNull('192.168.1.1') AS valid_ip,
toIPv4OrNull('invalid.ip') AS invalid_ip
┌─valid_ip────┬─invalid_ip─┐
│ 192.168.1.1 │ ᴺᵁᴸᴸ │
└─────────────┴────────────┘
toIPv4OrZero
도입: v23.1.0
입력 값을 IPv4 타입 값으로 변환하지만, 오류가 있으면 0 IPv4 주소를 반환해요. 변환 오류 시 예외를 던지는 대신 0 IPv4 주소(0.0.0.0)를 반환한다는 점 외에는 toIPv4OrNull과 같아요.
지원되는 인자:
- 점으로 구분된 10진수 표기의 IPv4 주소 문자열.
- IPv4 주소의 정수 표현.
지원되지 않는 인자(0 IPv4 반환):
- 유효하지 않은 IP 주소 형식.
- IPv6 주소.
- 범위를 벗어난 값.
구문 (Syntax)
toIPv4OrZero(x)
인자 (Arguments)
x— IPv4 주소의 문자열 또는 정수 표현.String또는Integer
반환 값 (Returned value)
성공하면 IPv4 주소, 그렇지 않으면 0 IPv4 주소(0.0.0.0). IPv4
예시 (Examples)
SELECT
toIPv4OrZero('192.168.1.1') AS valid_ip,
toIPv4OrZero('invalid.ip') AS invalid_ip
┌─valid_ip────┬─invalid_ip─┐
│ 192.168.1.1 │ 0.0.0.0 │
└─────────────┴────────────┘
toIPv6
도입: v20.1.0
문자열 또는 UInt128 형태의 IPv6 주소를 IPv6 타입으로 변환해요. 문자열의 경우 IPv6 주소 형식이 유효하지 않으면 빈 값을 반환해요. IPv6 주소를 바이너리 형식(즉 FixedString(16))으로 서로 변환하는 IPv6StringToNum과 IPv6NumToString 함수와 비슷해요.
입력 문자열이 유효한 IPv4 주소를 담고 있으면 해당 IPv4 주소의 IPv6 동등 값을 반환해요.
구문 (Syntax)
toIPv6(x)
인자 (Arguments)
x— IP 주소.String또는UInt128
반환 값 (Returned value)
IPv6 주소를 반환해요. IPv6
예시 (Examples)
WITH '2001:438:ffff::407d:1bc1' AS IPv6_string
SELECT
hex(IPv6StringToNum(IPv6_string)),
hex(toIPv6(IPv6_string));
┌─hex(IPv6StringToNum(IPv6_string))─┬─hex(toIPv6(IPv6_string))─────────┐
│ 20010438FFFF000000000000407D1BC1 │ 20010438FFFF000000000000407D1BC1 │
└───────────────────────────────────┴──────────────────────────────────┘
IPv4→IPv6 매핑
SELECT toIPv6('127.0.0.1');
┌─toIPv6('127.0.0.1')─┐
│ ::ffff:127.0.0.1 │
└─────────────────────┘
toIPv6OrDefault
도입: v22.3.0
문자열 또는 UInt128 형태의 IPv6 주소를 IPv6 타입으로 변환해요. IPv6 주소 형식이 유효하지 않으면 ::(0 IPv6), 또는 제공한 IPv6 기본값을 반환해요.
구문 (Syntax)
toIPv6OrDefault(string[, default])
인자 (Arguments)
string— 변환할 IP 주소 문자열. -default— 선택 사항.string형식이 유효하지 않을 때 반환할 값.
반환 값 (Returned value)
IPv6 주소, 그렇지 않으면 :: 또는 인자 string 형식이 유효하지 않을 때 제공한 선택적 기본값. IPv6
예시 (Examples)
유효/무효 IPv6 문자열
WITH
'2001:0db8:85a3:0000:0000:8a2e:0370:7334' AS valid_IPv6_string,
'2001:0db8:85a3::8a2e:370g:7334' AS invalid_IPv6_string,
'not_an_ipv6' AS malformed_string
SELECT
toIPv6OrDefault(valid_IPv6_string) AS valid,
toIPv6OrDefault(invalid_IPv6_string) AS default_value,
toIPv6OrDefault(malformed_string, toIPv6('::1')) AS provided_default;
┌─valid────────────────────────┬─default_value─┬─provided_default─┐
│ 2001:db8:85a3::8a2e:370:7334 │ :: │ ::1 │
└──────────────────────────────┴───────────────┴──────────────────┘
toIPv6OrNull
도입: v22.3.0
입력 값을 IPv6 타입 값으로 변환하지만, 오류가 있으면 NULL을 반환해요. 변환 오류 시 예외를 던지는 대신 NULL을 반환한다는 점 외에는 toIPv6OrDefault와 같아요.
지원되는 인자:
- 표준 표기의 IPv6 주소 문자열.
- IPv4 주소의 문자열 표현(IPv4 매핑 IPv6으로 변환).
- IPv6 주소의 바이너리 표현.
지원되지 않는 인자(NULL 반환):
- 유효하지 않은 IP 주소 형식.
- 잘못된 형식의 IPv6 주소.
- 범위를 벗어난 값.
- 잘못된 표기.
구문 (Syntax)
toIPv6OrNull(x)
인자 (Arguments)
x— IPv6 또는 IPv4 주소의 문자열 표현.String
반환 값 (Returned value)
성공하면 IPv6 주소, 그렇지 않으면 NULL. IPv6 또는 NULL
예시 (Examples)
SELECT
toIPv6OrNull('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6,
toIPv6OrNull('invalid::ip') AS invalid_ipv6
┌─valid_ipv6───────────────────┬─invalid_ipv6─┐
│ 2001:db8:85a3::8a2e:370:7334 │ ᴺᵁᴸᴸ │
└──────────────────────────────┴──────────────┘
toIPv6OrZero
도입: v23.1.0
입력 값을 IPv6 타입 값으로 변환하지만, 오류가 있으면 0 IPv6 주소를 반환해요. 변환 오류 시 예외를 던지는 대신 0 IPv6 주소(::)를 반환한다는 점 외에는 toIPv6OrNull과 같아요.
지원되는 인자:
- 표준 표기의 IPv6 주소 문자열.
- IPv4 주소의 문자열 표현(IPv4 매핑 IPv6으로 변환).
- IPv6 주소의 바이너리 표현.
지원되지 않는 인자(0 IPv6 반환):
- 유효하지 않은 IP 주소 형식.
- 잘못된 형식의 IPv6 주소.
- 범위를 벗어난 값.
구문 (Syntax)
toIPv6OrZero(x)
인자 (Arguments)
x— IPv6 또는 IPv4 주소의 문자열 표현.String
반환 값 (Returned value)
성공하면 IPv6 주소, 그렇지 않으면 0 IPv6 주소(::). IPv6
예시 (Examples)
SELECT
toIPv6OrZero('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6,
toIPv6OrZero('invalid::ip') AS invalid_ipv6
┌─valid_ipv6───────────────────┬─invalid_ipv6─┐
│ 2001:db8:85a3::8a2e:370:7334 │ :: │
└──────────────────────────────┴──────────────┘