PostgreSQL의 인간화된 문자열 정렬
문자와 숫자가 혼합된 문자열을 인도적으로 정렬하는 것은 PostgreSQL에서 어려울 수 있지만 regexp_matches()
과 배열 집계의 조합을 사용하면 달성할 수 있습니다.
문자열 분할
첫 번째 단계는 각 문자열을 구성 요소인 알파벳과 숫자 부분으로 나누는 것입니다. 이는 regexp_matches()
함수와 (D*)(d*)
같은 정규식을 사용하여 수행할 수 있습니다. 그런 다음 일치 항목의 결과 배열을 반복하여 쌍의 배열을 만들 수 있습니다. 각 쌍은 텍스트 값과 정수 값을 포함합니다.
이 쌍 정렬
다음 단계는 원하는 인간 친화적인 순서에 따라 이러한 값 쌍을 정렬하는 것입니다. 텍스트 값은 일반 문자열 정렬 순서로 정렬할 수 있고, 정수 값은 정수로 정렬할 수 있습니다.
문자열 재결합
마지막으로 정렬된 쌍을 사용하여 원하는 맞춤 순서로 원래 문자열을 재조립할 수 있습니다.
PostgreSQL 9.4 이상
PostgreSQL 9.4 이상에서는 다음 쿼리를 사용할 수 있습니다.
<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 9.1
PostgreSQL 9.1에서는 다음 쿼리를 사용할 수 있습니다.
<code class="language-sql">SELECT data FROM ( SELECT ctid, data, regexp_matches(data, '(\D*)(\d*)', 'g') AS x FROM alnum ) x GROUP BY ctid, data -- ctid 作为缺少主键的替代 ORDER BY regexp_replace (left(data, 1), '[0-9]', '0') , array_agg(ROW(x[1], CASE x[2] WHEN '' THEN '0' ELSE x[2] END)::ai) , data -- 用于处理尾随 0 的特殊情况</code>
위 내용은 PostgreSQL에서 영숫자 문자열을 어떻게 인도적으로 정렬할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!