SQL에 포함된 숫자를 사용하여 문자열 열을 정렬하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-10-25 04:13:30
원래의
725명이 탐색했습니다.

How Can I Sort String Columns with Embedded Numbers in SQL?

SQL에서 숫자가 포함된 문자열 열 정렬

SQL에서 숫자가 포함된 문자열 열을 정렬하는 것은 어려울 수 있습니다. 많은 데이터베이스의 자연스러운 정렬 알고리즘은 "a 1" 뒤에 "a 12"를 배치하는 것과 같이 숫자를 잘못된 순서로 배치합니다. 이 동작은 대부분의 애플리케이션에서 허용되지만 특정 요구 사항에는 바람직하지 않을 수 있습니다.

순수 SQL을 사용하여 숫자가 포함된 문자열 열을 정렬할 수 있습니까?

해결책

열이 "WORD space NUMBER"라는 특정 패턴을 따른다고 가정하면 다음 코드 조각을 사용하여 열을 올바르게 정렬할 수 있습니다.

SELECT *
FROM table
ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)
로그인 후 복사

작동 방법은 다음과 같습니다.

  • LOCATE(' ',column)은 문자열에서 공백 문자의 위치를 ​​찾습니다.
  • SUBSTRING(column,LOCATE(' ',column) 1)은 문자열의 숫자 부분을 추출합니다. 공백 뒤.
  • CAST(... AS SIGNED)는 비교를 위해 추출된 숫자를 부호 있는 정수로 변환합니다.

개념 증명

다음 예는 정렬 동작을 보여줍니다.

mysql> INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11');
mysql> SELECT * FROM t ORDER BY st;
mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
로그인 후 복사

두 번째 쿼리는 "a 12" 앞에 "a 1"을 배치하여 결과를 올바르게 정렬합니다.

고려 사항

열 패턴이 "WORD space NUMBER"와 다른 경우 다른 해결 방법이 필요할 수 있습니다.

개선 사항

다음 향상된 쿼리 숫자 값으로 문자 접두어를 분리하는 이중 정렬을 추가합니다.

ORDER BY SUBSTRING_INDEX(st, " ", 1) ASC, CAST(SUBSTRING_INDEX(st, " ", -1) AS SIGNED)
로그인 후 복사

이 수정된 코드 조각은 보다 포괄적인 정렬 솔루션을 제공합니다.

위 내용은 SQL에 포함된 숫자를 사용하여 문자열 열을 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!