programing

SQL Oracle 정렬 문자열(숫자) 및 (숫자가 있는 문자)

closeapi 2023. 7. 10. 22:20
반응형

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

반응형