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
'programing' 카테고리의 다른 글
stdout을 일종의 문자열 버퍼로 리디렉션할 수 있습니까? (0) | 2023.07.01 |
---|---|
함수에 다차원 변수 길이 배열 전달 (0) | 2023.07.01 |
dplyr을 사용하여 중복된 요소 찾기 (0) | 2023.07.01 |
Firebase의 클라우드 기능이 무료인지 여부(클라우드 기능을 구축하려면 종량제(Blaze) 과금 계획 필요) (0) | 2023.07.01 |
Oracle과 SQL Server를 혼합한 Entity Framework 5 (0) | 2023.07.01 |