집 >데이터 베이스 >MySQL 튜토리얼 >Null을 처리하면서 SQL의 쉼표로 구분된 목록에서 N번째 값을 안정적으로 추출하는 방법은 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!