>데이터 베이스 >MySQL 튜토리얼 >Null을 처리하면서 SQL의 쉼표로 구분된 목록에서 N번째 값을 안정적으로 추출하는 방법은 무엇입니까?

Null을 처리하면서 SQL의 쉼표로 구분된 목록에서 N번째 값을 안정적으로 추출하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 16:44:41874검색

How to Reliably Extract the Nth Value from a Comma-Separated List in SQL, Handling Nulls?

Null이 포함된 쉼표로 구분된 목록에서 특정 값을 선택하는 Regex 솔루션

REGEXP_SUBSTR을 사용하여 쉼표로 구분된 목록에서 n번째 값을 추출하는 경우 (), null 값을 처리하는 것이 까다로울 수 있습니다. 다음은 문제에 대한 자세한 조사와 포괄적인 해결 방법입니다.

먼저 다음 시나리오를 고려하세요.

SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data
from dual;

D
-
2

이 쿼리는 Null이 아닌 두 번째 값("2")을 성공적으로 검색합니다. 정규식 [^,] 을 사용하여 목록을 만듭니다. 그러나 두 번째 값이 null이면 쿼리는 세 번째 항목을 반환합니다.

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data
from dual;

D
-
3

이 문제를 해결하려면 선택적 문자를 허용하는 보다 유연한 정규식이 필요합니다.

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data
from dual;

D
-
3

그러나 이 정규식은 null을 초과하는 숫자에 대해서도 실패합니다.

궁극적으로 해결책은 더 정교한 방법에 있습니다. regex:

REGEX_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1)

이 정규식은 n번째 쉼표가 나타나기 전이나 줄이 끝나기 전의 데이터를 캡처합니다. 결과는 다음과 같습니다.

Data
----

이 솔루션을 재사용 가능한 함수로 캡슐화하려면 다음 코드를 고려하세요.

FUNCTION GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
BEGIN
  RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
END GET_LIST_ELEMENT;

이 함수는 다음과 같이 호출할 수 있습니다.

select get_list_element('123,222,,432,555', 4) from dual;

잠재적인 null 또는 선택되는 특정 요소에 관계없이 이 솔루션은 다음에서 값을 추출하는 강력하고 우아한 방법을 제공합니다. Oracle SQL의 쉼표로 구분된 목록.

위 내용은 Null을 처리하면서 SQL의 쉼표로 구분된 목록에서 N번째 값을 안정적으로 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.