programing

Oracle이 전날 기록 가져오기

sourcejob 2023. 7. 13. 20:50
반응형

Oracle이 전날 기록 가져오기

알겠습니다. 전날이 아니라 전년도를 받는 것 같은데, 전날이 필요합니다.

SELECT TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual

저는 이 형식의 날짜 스탬프와 비교하고 있으며, 전날의 모든 행을 받고 싶습니다.

YYYY-MM-DD HH:MM:SS

그래서 저는 이런 것을 시도하고 있습니다.

SELECT field,datetime_field 
FROM database
WHERE datetime_field > TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1

sysdate는 어때요?

SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)

다음을 사용하여 날짜의 시간 부분을 제거할 수 있습니다.TRUNC.

select field,datetime_field 
  from database
 where datetime_field >= trunc(sysdate-1,'DD');

이 쿼리는 어제부터 시작하는 날짜가 포함된 모든 행을 제공합니다.두 번째 인수를 기록합니다.trunc()이를 사용하여 날짜의 일부를 잘라낼 수 있습니다.

datetime_fied에 다음이 포함된 경우'2011-05-04 08:23:54'다음 날짜가 반환됩니다.

trunc(datetime_field, 'HH24') => 2011-05-04 08:00:00
trunc(datetime_field, 'DD')   => 2011-05-04 00:00:00
trunc(datetime_field, 'MM')   => 2011-05-01 00:00:00
trunc(datetime_field, 'YYYY') => 2011-00-01 00:00:00
SELECT field,datetime_field 
FROM database
WHERE datetime_field > (CURRENT_DATE - 1)

오라클에서 일한 지 얼마 안 됐어요.하지만, 저는 이것이 효과가 있을 것이라고 생각합니다.

이것.

    SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)

효과가 있을 것입니다.질문: 'datetime_field'의 형식이 sysdate와 동일합니까?나의 방법은 'to_char()' 함수를 사용하는 것입니다(오라클에서만 작동).

샘플: 전날:

select your_column
from your_table
where to_char(sysdate-1, 'dd.mm.yyyy')

또는

select extract(day from date_field)||'/'|| 
       extract(month from date_field)||'/'||
       extract(year from date_field)||'/'||
as mydate
from dual(or a_table)
where extract(day from date_field) = an_int_number and
      extract(month from date_field) = an_int_number and so on..

비교 날짜:

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate, 'dd.mm.yyyy')

어제와 그저께 사이의 시간 범위:

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-1, 'dd.mm.yyyy') and
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-2, 'dd.mm.yyyy')

기타 시간 범위 변동

select your_column
from your_table
where 
to_char(a_datetime_column, 'dd.mm.yyyy') is between to_char(sysdate-1, 'dd.mm.yyyy') 
and to_char(sysdate-2, 'dd.mm.yyyy')

간단한 솔루션 및 이해

질문에 대답하기

SELECT field,datetime_field 
FROM database
WHERE TO_CHAR(date_field, 'YYYYMMDD') = TO_CHAR(SYSDATE-1, 'YYYYMMDD');

약간의 설명

날짜 형식이 아니지만 날짜를 사용하여 비교하려는 필드가 있는 경우(예: 20190823(YYYMMDD) 필드는 날짜로 간주되지만 숫자 형식입니다.

SELECT * FROM YOUR_TABLE WHERE ID_DATE = TO_CHAR(SYSDATE-1, 'YYYYMMDD') 

날짜/시간 스탬프 형식의 필드가 있고 비교해야 할 경우 형식을 변경합니다.

SELECT TO_CHAR(SYSDATE-1, 'YYYY-MM-DD HH24:MI:SS')  FROM DUAL

날짜 형식으로 되돌리려면

SELECT TO_DATE(TO_CHAR(SYSDATE-1, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS NEW_DATE  FROM DUAL

결론.

이러한 지식을 바탕으로 비교하고자 하는 파일을 YYYYMMDD, YYY-MM-DD 또는 년-월-일 형식과 비교하여 동일한 시스템 날짜 형식으로 변환할 수 있습니다.

다음 명령도 실행할 수 있습니다.

듀얼에서 (sysdate-1) PREVIDE_DATE를 선택합니다;

저는 이 부분에 대해 "TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD')", 'YYYY-MM-DD'에 대해 조금 혼란스럽습니다.당신은 이 조항으로 무엇을 하려고 했습니까?DUAL에서 날짜를 가져오는 기본 쿼리를 실행할 때 결과에 표시되는 형식이 기본 형식입니다.그 외에는 당신의 쿼리에서 이 작업을 수행했고 전날 'SELECT (CURENT_DATE - 1) FROM Dual'을 검색했습니다.문제가 해결되면 알려주시고 해결되지 않으면 문제에 대해 말씀해주세요.감사합니다. 좋은 일만 가득하세요.

언급URL : https://stackoverflow.com/questions/2555392/oracle-get-previous-day-records

반응형