source

Oracle SQL 쿼리를 사용하여 먼저 숫자별로 정렬하는 방법은 무엇입니까?

factcode 2023. 8. 7. 23:10
반응형

Oracle SQL 쿼리를 사용하여 먼저 숫자별로 정렬하는 방법은 무엇입니까?

이 표에는 '제목' 필드가 varchar2로 되어 있으며, 모든 행을 선택하여 번호별로 정렬한 후 알파벳별로 정렬합니다.

예를 들어, 저는 현재 간단한 것을 사용하여 이것을 얻습니다.ORDER BY title결국에는:

  • ABC
  • 데프
  • 321

하지만 나는 이것을 원합니다.

  • 321
  • ABC
  • 데프

이상한 것은 SQL Developer가 숫자가 먼저인 "올바른" 순서를 보여준다는 것입니다.하지만 제 앱(OCI8을 사용한 PHP)에서는 마지막에 숫자가 표시됩니다.

Oracle 전문가는 아니지만 세션을 변경하지 않고도 이 작업을 수행할 수 있어야 합니다.

SELECT * FROM my_data SORT by NLSSORT(title,’NLS_SORT=BINARY_AI’)

변경할 수 있는 위치NLS_SORT=사용자의 요구에 적합합니다(값 목록은 다음과 같습니다).

문서에 따르면 테이블 검색이 강제로 실행되므로 먼저 필터링하는 것이 좋을 수 있습니다(그러나 모든 테이블 검색을 선택하는 경우에는 어쨌든 사용할 항목임).

SQL Developer가 다른 동작을 보이는 이유는 세션을 변경하기 때문일 수 있습니다.

당신이 보고 있는 행동의 차이는 아마도 다른 것 때문일 것입니다.NLS_SORT매개 변수 설정.고려 사항:

SQL> select * from nls_session_parameters where parameter='NLS_SORT';

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_SORT                       BINARY

SQL> SELECT * FROM my_data order by title;

TITLE
-----
321
Abc
Def

SQL> alter session set nls_sort=french;

Session altered

SQL> SELECT * FROM my_data order by title;

TITLE
-----
Abc
Def
321

당신은 당신의 요구에 상관없이 당신에게 기대되는 결과를 제공해야 하는 쿼리를 구축할 수 있습니다.NLS_SORT세션 매개 변수 설정(예:

SQL> SELECT *
  2    FROM my_data
  3   ORDER BY CASE
  4               WHEN regexp_like(title, '[0-9]+\.?[0-9]*') THEN
  5                1
  6               ELSE
  7                2
  8            END, title;

TITLE
-----
321
Abc
Def

언급URL : https://stackoverflow.com/questions/4324410/how-to-sort-by-numbers-first-with-oracle-sql-query

반응형