SQL Oracle 정렬 문자열(숫자) 및 (숫자가 있는 문자)
나는 오라클에 처음이고 문제가 있습니다.file_id라는 열이 있습니다.
다음과 같은 문자열을 정렬합니다.
1
1
10
100
11
11
110
114
12
300
31
4200
B14
B170
B18
편집: 이렇게 정렬했으면 합니다.
1
1
10
11
11
12
31
100
300
4200
B14
B18
B170
아래의 답변은 완벽하게 작동합니다.내가 지금 마주친 유일한 문제는..저는 빈 레코드가 있습니다.어떻게 하면 마지막에 빈 레코드를 주문할 수 있습니까?
1
1
10
11
11
12
31
100
300
4200
BLANK
BLANK
BLANK
BLANK
BLANK
B14
B18
B170
도와주셔서 고맙습니다.
select column
from table
order by
regexp_substr(column, '^\D*') nulls first,
to_number(regexp_substr(column, '\d+'))
이것은 오래된 질문이지만 구글에서 처음으로 히트를 쳤기 때문에 다른 솔루션을 공유하려고 생각했습니다.
select column
from table
order by
LPAD(column, 10)
LPAD 기능은 결과가 숫자로 정렬되도록 문자열의 왼쪽에 공백을 추가합니다.숫자가 아닌 값에 대해 작동하며 null 값이 마지막으로 정렬됩니다.이것은 정렬할 문자열의 최대 길이를 알고 있는 경우에 잘 작동합니다(필요에 따라 두 번째 매개 변수를 조정해야 할 수도 있습니다).
출처: http://www.techonthenet.com/oracle/questions/sort1.php
편집:
제 경우에는 솔루션이 잘 작동하지만, 출력이 허용된 답변(http://www.sqlfiddle.com/ #!4/d935b8/2/0)과 약간 다르다는 것을 알게 되었습니다.
1
1
10
11
11
12
31
100
110
114
300
A14
A18
4200
A170
(null)
(null)
4200은 300 다음에 와야 합니다.내 상황에서는 이것으로 충분하지만, 항상 그렇지는 않을 수도 있습니다.
이전 솔루션을 기반으로 합니다.
SELECT column
FROM table
ORDER BY LPAD(column, (SELECT MAX(LENGTH(column)) FROM table)) ASC
이 방법의 장점은 표 열 크기를 알 필요가 없다는 것입니다.
언급URL : https://stackoverflow.com/questions/15572737/sql-oracle-sort-string-numbers-and-letters-with-numbers
'programing' 카테고리의 다른 글
Oracle 트리거 ORA-04098: 트리거가 잘못되었으며 재검증에 실패했습니다. (0) | 2023.07.10 |
---|---|
기지개를 켜다커밋할 수 없습니다.어떻게 진행하거나 중단합니까? (0) | 2023.07.10 |
사용자 정의 ID를 가진 문서를 Firestore에 추가하는 방법 (0) | 2023.07.10 |
Angular는 XSS 또는 CSRF를 어떻게 처리합니까? (0) | 2023.07.05 |
MVC4에서 BundleCollection이 캐시된 스크립트 번들을 강제로 플러시하는 방법 (0) | 2023.07.05 |