SEARCH_IP

하나 이상의 테이블에서 지정된 문자 문자열 열(VARIANT, OBJECT, ARRAY 열의 필드 포함)의 유효한 IPv4 주소를 검색합니다. 검색은 사용자가 지정한 단일 IP 주소 또는 IP 주소 범위를 기반으로 합니다. 이 IP 주소가 지정된 열이나 필드의 IP 주소와 일치하는 경우 함수는 TRUE를 반환합니다.

이 함수를 사용하는 방법에 대한 자세한 내용은 전체 텍스트 검색 사용하기 섹션을 참조하십시오.

구문

SEARCH_IP( <search_data>, <search_string> )
Copy

인자

search_data

검색하려는 데이터는 문자열 리터럴, 열 이름 또는 VARIANT 열의 필드에 대한 경로 를 쉼표로 구분된 목록으로 표현됩니다. 검색 데이터는 단일 리터럴 문자열이 될 수도 있는데, 이는 함수를 테스트할 때 유용할 수 있습니다.

와일드카드 문자(*)를 지정할 수 있는데, 여기서 * 는 함수 범위에 있는 모든 테이블에 있는 모든 적격 열로 확장됩니다. 적격 열은 VARCHAR(텍스트), VARIANT, ARRAY, OBJECT 데이터 타입을 갖는 열입니다. VARIANT, ARRAY 및 OBJECT 데이터는 검색을 위해 텍스트로 변환됩니다. 필터링에 ILIKE 및 EXCLUDE 키워드를 사용할 수도 있습니다.

이 인자에 대한 자세한 내용은 SEARCH 함수에 대한 search_data 설명을 참조하십시오.

search_string

다음 중 하나가 포함된 VARCHAR 문자열입니다.

  • 표준 IPv4 형식의 완전하고 유효한 IP 주소(예: 192.0.2.1).

  • CIDR(Classless Inter-Domain Routing) 범위(예: 192.0.2.1/24)를 갖는 표준 IPv4 형식의 유효한 IP 주소.

  • 앞에 0이 오는 표준 IPv4 형식의 유효한 IP 주소(예: (192.0.2.1 대신) 192.000.002.001). 이 함수는 IP 주소의 각 부분에 대해 최대 3개의 숫자를 허용합니다.

이 인자는 리터럴 문자열이어야 하며, 열 이름은 지원되지 않습니다. 문자열을 작은따옴표 한 쌍으로 묶어 지정합니다.

IP 주소는 2개 이상 지정할 수 없습니다. IPv6 주소나 IPv4 주소의 일부를 지정할 수 없습니다.

반환

BOOLEAN 을 반환합니다.

  • search_string 에 유효한 IP 주소가 지정되고 search_data 에서 일치하는 IP 주소를 찾은 경우 TRUE를 반환합니다.

  • CIDR 범위가 있는 유효한 IP 주소가 search_string 에 지정되어 있고 지정된 범위의 IP 주소를 search_data 에서 찾은 경우 TRUE를 반환합니다.

  • search_string 이 비어 있고 search_data 에서 유효한 IP 주소를 찾을 수 없는 경우 TRUE를 반환합니다.

  • 이러한 인자 중 하나가 NULL이면 NULL을 반환합니다.

  • 그렇지 않으면 FALSE를 반환합니다.

사용법 노트

  • SEARCH_IP 함수는 VARCHAR, VARIANT, ARRAY 및 OBJECT 데이터에 대해서만 작동합니다. search_data 인자에 이러한 데이터 타입의 데이터가 포함되지 않은 경우 함수는 오류를 반환합니다. search_data 인자에 지원되는 데이터 타입과 지원되지 않는 데이터 타입의 데이터가 모두 포함된 경우, 함수는 지원되는 데이터 타입의 데이터를 검색하고 지원되지 않는 데이터 타입의 데이터는 자동으로 무시합니다. 예는 예상되는 오류 사례의 예 을 참조하십시오.

  • SEARCH_IP 함수는 VARCHAR, VARIANT, ARRAY 및 OBJECT 데이터에 대해서만 작동합니다. 다른 데이터 타입을 검색하려고 하면 함수에서 오류를 반환합니다. 예는 예상되는 오류 사례의 예 을 참조하십시오.

  • ENTITY_ANALYZER를 지정하는 ALTER TABLE 명령을 사용하여 SEARCH_IP 함수 호출의 대상이 되는 열에 FULL_TEXT 검색 최적화를 추가할 수 있습니다. 예:

    ALTER TABLE ipt ADD SEARCH OPTIMIZATION ON FULL_TEXT(
      ip1,
      ANALYZER => 'ENTITY_ANALYZER');
    
    Copy

    자세한 내용은 FULL_TEXT 검색 최적화 사용하기 섹션을 참조하십시오.

다음 예에서는 SEARCH_IP 함수를 사용하여 VARCHAR 및 VARIANT 열을 쿼리하는 방법을 보여줍니다.

VARCHAR 열에서 일치하는 IP 주소 검색하기

ipt 라는 테이블을 만들고 다음 두 행을 삽입합니다.

CREATE OR REPLACE TABLE ipt(id INT, ip1 VARCHAR(20), ip2 VARCHAR(20));
INSERT INTO ipt VALUES(1, '192.0.2.146', '203.0.113.5');
INSERT INTO ipt VALUES(2, '192.0.2.111', '192.000.002.146');
Copy

다음 검색 쿼리를 실행합니다. 첫 번째 쿼리에서는 SELECT 목록에서 SEARCH_IP 함수를 사용하고 테이블에서 두 VARCHAR 열을 검색합니다.

SELECT ip1,
       ip2,
       SEARCH_IP((ip1, ip2), '192.0.2.146')
  FROM ipt
  ORDER BY ip1;
Copy
+-------------+-----------------+--------------------------------------+
| IP1         | IP2             | SEARCH_IP((IP1, IP2), '192.0.2.146') |
|-------------+-----------------+--------------------------------------|
| 192.0.2.111 | 192.000.002.146 | True                                 |
| 192.0.2.146 | 203.0.113.5     | True                                 |
+-------------+-----------------+--------------------------------------+

192.000.002.146 앞에 0이 오지만 search_data 192.000.002.146search_string 192.0.2.146 과 일치합니다.

다음 쿼리는 CIDR 범위를 갖는 search_string 을 보여줍니다.

SELECT ip1,
       ip2,
       SEARCH_IP((ip1, ip2), '192.0.2.1/20')
  FROM ipt
  ORDER BY ip1;
Copy
+-------------+-----------------+---------------------------------------+
| IP1         | IP2             | SEARCH_IP((IP1, IP2), '192.0.2.1/20') |
|-------------+-----------------+---------------------------------------|
| 192.0.2.111 | 192.000.002.146 | True                                  |
| 192.0.2.146 | 203.0.113.5     | True                                  |
+-------------+-----------------+---------------------------------------+

다음 쿼리는 앞에 0이 오는 search_string 은 앞에 0이 생략된 IP 주소에 대해 True 를 반환함을 보여줍니다.

SELECT ip1,
       ip2,
       SEARCH_IP((ip1, ip2), '203.000.113.005')
  FROM ipt
  ORDER BY ip1;
Copy
+-------------+-----------------+------------------------------------------+
| IP1         | IP2             | SEARCH_IP((IP1, IP2), '203.000.113.005') |
|-------------+-----------------+------------------------------------------|
| 192.0.2.111 | 192.000.002.146 | False                                    |
| 192.0.2.146 | 203.0.113.5     | True                                     |
+-------------+-----------------+------------------------------------------+

다음 쿼리는 WHERE 절에 이 함수를 사용하며 ip2 열만 검색합니다.

SELECT ip1,
       ip2
  FROM ipt
  WHERE SEARCH_IP(ip2, '203.0.113.5')
  ORDER BY ip1;
Copy
+-------------+-------------+
| IP1         | IP2         |
|-------------+-------------|
| 192.0.2.146 | 203.0.113.5 |
+-------------+-------------+

WHERE 절에서 이 함수를 사용하는데 일치하는 항목이 없으면 아무런 값도 반환되지 않습니다.

SELECT ip1,
       ip2
  FROM ipt
  WHERE SEARCH_IP(ip2, '203.0.113.1')
  ORDER BY ip1;
Copy
+-----+-----+
| IP1 | IP2 |
|-----+-----|
+-----+-----+

이 예에서 보듯이 * 문자(또는 table.*)를 SEARCH 함수의 첫 번째 인자로 사용할 수 있습니다. 검색은 선택하는 테이블의 모든 적격 열에서 수행됩니다.

SELECT ip1,
       ip2
  FROM ipt
  WHERE SEARCH_IP((*), '203.0.113.5')
  ORDER BY ip1;
Copy
+-------------+-------------+
| IP1         | IP2         |
|-------------+-------------|
| 192.0.2.146 | 203.0.113.5 |
+-------------+-------------+

필터링에 ILIKE 및 EXCLUDE 키워드를 사용할 수도 있습니다. 이러한 키워드에 대한 자세한 내용은 SELECT 섹션을 참조하십시오.

이 검색에서는 ILIKE 키워드를 사용하여 문자열 ip 로 시작하는 열에서만 검색합니다.

SELECT ip1,
       ip2
  FROM ipt
  WHERE SEARCH_IP(* ILIKE 'ip%', '192.0.2.111')
  ORDER BY ip1;
Copy
+-------------+-----------------+
| IP1         | IP2             |
|-------------+-----------------|
| 192.0.2.111 | 192.000.002.146 |
+-------------+-----------------+

ipt 테이블의 열에 대해 FULL_TEXT 검색 최적화를 사용하려면 다음 ALTER TABLE 명령을 실행합니다.

ALTER TABLE ipt ADD SEARCH OPTIMIZATION ON FULL_TEXT(
  ip1,
  ip2,
  ANALYZER => 'ENTITY_ANALYZER');
Copy

참고

사용자가 지정하는 열은 VARCHAR 또는 VARIANT 열이어야 합니다. 다른 데이터 타입을 갖는 열은 지원되지 않습니다.

VARIANT 열에서 일치하는 IP 주소 검색하기

다음 예에서는 SEARCH_IP 함수를 사용하여 VARIANT 열의 필드에 대한 경로를 검색합니다. iptv 라는 테이블을 만들고 다음 두 행을 삽입합니다.

CREATE OR REPLACE TABLE iptv(ip1 VARIANT);
INSERT INTO iptv(ip1)
  SELECT PARSE_JSON(' { "ipv1": "203.0.113.5", "ipv2": "203.0.113.5" } ');
INSERT INTO iptv(ip1)
  SELECT PARSE_JSON(' { "ipv1": "192.0.2.146", "ipv2": "203.0.113.5" } ');
Copy

다음 검색 쿼리를 실행합니다. 첫 번째 쿼리는 ipv1 필드만 검색합니다. 두 번째 쿼리는 ipv1ipv2 를 검색합니다.

SELECT * FROM iptv
  WHERE SEARCH_IP((ip1:"ipv1"), '203.0.113.5');
Copy
+--------------------------+
| IP1                      |
|--------------------------|
| {                        |
|   "ipv1": "203.0.113.5", |
|   "ipv2": "203.0.113.5"  |
| }                        |
+--------------------------+
SELECT * FROM iptv
  WHERE SEARCH_IP((ip1:"ipv1",ip1:"ipv2"), '203.0.113.5');
Copy
+--------------------------+
| IP1                      |
|--------------------------|
| {                        |
|   "ipv1": "203.0.113.5", |
|   "ipv2": "203.0.113.5"  |
| }                        |
| {                        |
|   "ipv1": "192.0.2.146", |
|   "ipv2": "203.0.113.5"  |
| }                        |
+--------------------------+

ip1 VARIANT 열과 해당 필드에 대해 FULL_TEXT 검색 최적화를 사용하려면 다음 ALTER TABLE 명령을 실행합니다.

ALTER TABLE iptv ADD SEARCH OPTIMIZATION ON FULL_TEXT(
  ip1:"ipv1",
  ip1:"ipv2",
  ANALYZER => 'ENTITY_ANALYZER');
Copy

참고

사용자가 지정하는 열은 VARCHAR 또는 VARIANT 열이어야 합니다. 다른 데이터 타입을 갖는 열은 지원되지 않습니다.

예상되는 오류 사례의 예

다음 예에서는 예상되는 구문 오류를 반환하는 쿼리를 보여줍니다.

다음 예시 코드는 5search_string 인자에 대해 지원되는 데이터 타입이 아니므로 실패합니다.

SELECT SEARCH_IP(ip1, 5) FROM ipt;
Copy
001045 (22023): SQL compilation error:
argument needs to be a string: '1'

다음 예시 코드는 search_data 인자에 대해 지원되는 데이터 타입의 열이 지정되지 않았으므로 실패합니다.

SELECT SEARCH_IP(id, '192.0.2.146') FROM ipt;
Copy
001173 (22023): SQL compilation error: error line 1 at position 7: Expected non-empty set of columns supporting full-text search.

다음 예시 코드는 search_data 인자에 대해 지원되는 데이터 타입의 열이 지정되었으므로 성공합니다. 이 함수는 id 열이 지원되는 데이터 타입이 아니라 무시합니다.

SELECT SEARCH_IP((id, ip1), '192.0.2.146') FROM ipt;
Copy
+-------------------------------------+
| SEARCH_IP((ID, IP1), '192.0.2.146') |
|-------------------------------------|
| True                                |
| False                               |
+-------------------------------------+