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 또는 String
  • cidr — 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 또는 String
  • cidr — 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) 또는 IPv6
  • bytesToCutForIPv6 — IPv6에서 잘라낼 바이트 수. UInt8
  • bytesToCutForIPv4 — 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 주소. String
  • prefix — 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 타입으로 변환해요. IPv4StringToNumIPv4NumToString 함수와 비슷하지만, 입력 인자로 문자열과 부호 없는 정수 타입을 모두 받아요.

구문 (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 주소 문자열. String
  • default — 선택 사항. 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))으로 서로 변환하는 IPv6StringToNumIPv6NumToString 함수와 비슷해요.

입력 문자열이 유효한 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 │ ::           │
└──────────────────────────────┴──────────────┘

더 알아보기 (Learn more)