>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL은 혼합된 단어와 숫자 문자열을 인간 친화적인 순서로 어떻게 정렬할 수 있습니까?

PostgreSQL은 혼합된 단어와 숫자 문자열을 인간 친화적인 순서로 어떻게 정렬할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-07 22:55:42440검색

How Can PostgreSQL Sort Mixed Word-and-Number Strings in a Human-Friendly Order?

PostgreSQL의 인간 친화적인 혼합 영숫자 문자열 정렬

PostgreSQL에서 혼합 영숫자 문자열을 인도적으로 정렬하는 것은 독특한 과제입니다. 이상적인 정렬 순서는 문자보다 숫자를 우선시하고 "20" 앞에 "3"을 배치하고 "10bob" 뒤에 "fred"를 배치하는 것입니다.

문자열을 숫자와 문자열 구성요소로 분할

한 가지 방법은 각 문자열을 영숫자 경계에서 덩어리로 분할하는 것입니다. 예를 들어, "AAA2fred"는 ("AAA", 2, "fred")가 됩니다. 이러한 분리를 통해 알파벳 블록에 대한 일반적인 대조 규칙을 사용하고 숫자 블록을 정수로 처리하여 데이터 유형을 기준으로 별도의 정렬이 가능합니다.

regexp_matches() 함수와 '(D*)(d*)' 옵션과 함께 'g' 모드를 사용하면 각 문자열의 이러한 구성 요소를 추출하고 array_agg()를 사용하여 ai 배열(텍스트와 정수 필드의 합성)을 만들 수 있습니다. 유형).

분할 데이터 정렬

문자열을 복합 유형의 배열로 분할하고 변환한 후 이러한 배열을 사용하여 정렬할 수 있습니다. ORDER BY 절은 이 배열을 사용하여 문자 블록이 숫자 블록 내에서 원래 순서를 유지하도록 합니다.

완벽한 솔루션

문자열 분할과 정렬 단계를 결합하면 다음 쿼리를 사용하여 원하는 인간과 유사한 정렬을 달성할 수 있습니다.

<code class="language-sql">SELECT data
FROM alnum
ORDER BY ARRAY(SELECT ROW(x[1], CASE x[2] WHEN '' THEN '0' ELSE x[2] END)::ai
                FROM regexp_matches(data, '(\D*)(\d*)', 'g') x)
        , data;</code>

이 솔루션은 각 문자열의 요소 수가 다양한 임의 데이터에 적합하며 특정 정렬 요구 사항에 맞게 사용자 정의할 수 있는 유연한 접근 방식을 제공합니다.

위 내용은 PostgreSQL은 혼합된 단어와 숫자 문자열을 인간 친화적인 순서로 어떻게 정렬할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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