programing

Oracle에서 날짜를 포맷하고 정렬하는 방법은 무엇입니까?

bestprogram 2023. 7. 1. 09:07

Oracle에서 날짜를 포맷하고 정렬하는 방법은 무엇입니까?

내 애플리케이션에서 날짜를 포맷하고 정렬하려고 합니다.to_char()날짜를 내가 원하는 형식으로 포맷하는 기능이지만 정렬할 때 문자열 정렬로 정렬됩니다.하지만 나는 그것들이 날짜로 분류되기를 원합니다.

동일한 질의에서 두 가지를 모두 달성하려면 도움이 필요합니다.저도 마찬가지로 도와주세요.

제가 사용한 질문은,

SELECT to_char( t1.your_date_column1, your_format_mask ) as alias,
  FROM your_table1 t1,your_table2
 ORDER BY t1.your_date_column1

당신이 원하는 것처럼 들리는군요.

SELECT to_char( your_date_column, your_format_mask )
  FROM your_table
 ORDER BY your_date_column

에서SELECT목록에서 원하는 형식으로 날짜를 나타내는 문자열을 반환하려고 합니다.에서ORDER BY조항, 당신은 실제 날짜까지 주문하기를 원합니다.표준 사용EMP그리고.DEPT표, 예:

SQL> ed
Wrote file afiedt.buf

  1  select to_char( hiredate, 'DD-MM-YYYY' )
  2    from emp,
  3         dept
  4   where emp.deptno = dept.deptno
  5*  order by hiredate
SQL> /

TO_CHAR(HI
----------
17-12-1980
20-02-1981
22-02-1981
02-04-1981
01-05-1981
09-06-1981
08-09-1981
28-09-1981
17-11-1981
03-12-1981
03-12-1981
23-01-1982
19-04-1987
23-05-1987

14 rows selected.

DISTINCT를 추가하면 Oracle이 적용 중인 함수(이 경우 TO_CHAR)가 테이블의 데이터에서 출력의 데이터로의 일대일 매핑을 제공한다는 것을 모른다는 문제가 발생합니다.예를 들어 두 개의 서로 다른 날짜(2010년 10월 1일 10:15:15 및 2010년 10월 1일 23:45:50)가 동일한 문자 출력을 생성하여 Oracle이 두 개의 '01-10-2010' 문자열 중 하나를 제거해야 하지만 두 날짜는 다르게 정렬됩니다.쿼리를 중첩하고 다음을 수행한 후 문자열을 다시 날짜로 변환하여 이 문제를 해결할 수 있습니다.DISTINCT그리고 하기 전에.ORDER BY

SQL> ed
Wrote file afiedt.buf

  1  select hire_date_str
  2    from (
  3      select distinct to_char( hiredate, 'DD-MM-YYYY' ) hire_date_str
  4        from emp,
  5             dept
  6       where emp.deptno = dept.deptno
  7      )
  8*  order by to_date(hire_date_str,'DD-MM-YYYY')
SQL> /

HIRE_DATE_
----------
17-12-1980
20-02-1981
22-02-1981
02-04-1981
01-05-1981
09-06-1981
08-09-1981
28-09-1981
17-11-1981
03-12-1981
23-01-1982
19-04-1987
23-05-1987

13 rows selected.
SELECT 
         to_char( your_date_column, your_format_mask ) as formate_purpose,

FROM your_table

ORDER BY to_date (formate_purpose)

위의 코드를 사용해 보십시오.

가장 쉬운 방법은 쿼리와 함께 동일한 필드를 다시 검색하고 해당 필드를 기준으로 정렬하는 것입니다.

예를 들어,

SELECT 
         to_char( your_date_column, your_format_mask ) as formate_purpose,
         your_date_column as sorting_purpose
FROM your_table

ORDER BY your_date_column

애플리케이션이 어떤 위치에 작성되었는지는 밝히지 않지만 일부 환경(예: Oracle APEX, Oracle Reports)에서는 사용하지 않는 이 솔루션입니다.to_char도구의 "열 속성" 또는 유사한 형식으로 원하는 형식을 적용합니다.

Oracle 정렬(권장)을 허용하는 경우 Justin Cave의 답변에 설명된 대로 수행합니다.어떤 이유로 인해 Java에서 정렬을 수행하는 경우,to_char로 날짜를 잡다Date대신 객체를 사용합니다(예: a).SimpleDateFormat(정렬 후) Java에서 형식 지정을 수행합니다.

sqlplus의 경우 session set nls_date_format을 날짜 형식으로 변경한 다음 select 문 및 정렬 순서에 열 이름만 사용합니다.

그룹화 기준 및 날짜별 순서 필드를 원했지만 날짜 필드에 시간이 포함되어 그룹화 및 정렬에 시간을 포함하지 않았습니다.그래서 날짜를 문자로 변환한 다음 문자를 날짜로 다시 변환하여 시간을 없애고 텍스트가 아닌 날짜별로 정렬했습니다.데이터를 날짜별로 그룹화하고 날짜별로 정렬합니다.

-- Projects initiated by Day.
select to_date(to_char(psd.PROJECTSTATUSDATE, 'mm/dd/yyyy'),'mm/dd/yyyy') as "Date", count(*)
from project pj, project_status_date psd
where PJ.PROJECTTOKEN = PSD.PROJECTTOKEN
      and psd.PROJECTSTATUSDATE > '01-JAN-2001'
      and PSD.PROJECTSTATUSCODE = 'BL'
group by to_date(to_char(psd.PROJECTSTATUSDATE, 'mm/dd/yyyy'),'mm/dd/yyyy') 
order by to_date(to_char(psd.PROJECTSTATUSDATE, 'mm/dd/yyyy'),'mm/dd/yyyy') 

Date      Count
8/16/2013   102
8/19/2013   77
8/20/2013   257
8/21/2013   30
8/22/2013   173
8/23/2013   125
8/26/2013   41
8/27/2013   25
8/28/2013   14

언급URL : https://stackoverflow.com/questions/7093743/how-to-format-and-sort-a-date-in-oracle