Oracle obține înregistrările din ziua precedentă (Programare, Oracle, Datetime)

Phill Pafford a intrebat.

Bine, cred că primesc anul precedent în loc de ziua precedentă, dar am nevoie de ziua precedentă.

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

Îl compar cu o ștampilă de dată în acest format și doresc să obțin toate rândurile din ziua precedentă.

YYYY-MM-DD HH:MM:SS

Așa că încerc ceva de genul

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

Comentarii

  • Presupunând că datetime_field este de tip DATE, codul dvs. ar trebui să funcționeze. Cu toate acestea, convertiți o dată într-un șir de caractere și înapoi într-o dată fără niciun motiv. Folosiți răspunsul lui shahkalpesh. –  > Por Igby Largeman.
  • Motivul conversiei este că vreau doar DATE, nu DATE/TIME –  > Por Phill Pafford.
7 răspunsuri
Eric Schneider

ce zici de sysdate?

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

Comentarii

  • SYSDATE adaugă ora, eu vreau doar data –  > Por Phill Pafford.
  • TRUNC() frumos! Nu m-am gândit să folosesc acest lucru –  > Por Phill Pafford.
  • trunc(current_date) funcționează și el. current_date = fusul orar al sesiunii Oracle; sysdate = data și ora serverului Oracle. –  > Por Eric Schneider.
  • Dacă aveți nevoie de înregistrări create astăzi, încercați acest lucru… SELECT field,datetime_field FROM database WHERE Trunc(datetime_field) = Trunc(sysdate) –  > Por Sai.
Ronnis

Puteți elimina partea de timp a unei date utilizând TRUNC.

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

Această interogare vă va oferi toate rândurile cu date începând de ieri. Rețineți că al doilea argument pentru trunc(). Îl puteți utiliza pentru a trunchia orice parte a datei.

Dacă datatime_fied conține '2011-05-04 08:23:54', va fi returnată următoarea dată

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

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

A trecut ceva timp de când am lucrat la Oracle. Dar, cred că acest lucru ar trebui să funcționeze.

Comentarii

  • CURRENT_DATE adaugă ora, eu vreau doar data –  > Por Phill Pafford.
ronaldo

acest lucru

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

va funcționa. Întrebarea este: este „datetime_field” are același format ca sysdate ? Modul meu de a rezolva acest lucru: utilizați funcția „to_char()” (funcționează numai în Oracle).

mostre:ziua precedentă:

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

sau

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..

compararea datei:

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

interval de timp între ieri și alaltăieri:

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')

alt interval de timp variație

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')

Omari Victor Omosa

Soluție simplă și înțelegere

Pentru a răspunde la întrebare:

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

Câteva explicații

Dacă aveți un câmp care nu este în format de dată, dar doriți să comparați folosind data, adică câmpul este considerat ca fiind o dată, dar în format numeric de exemplu, 20190823 (AAAALLZZ)

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

Dacă aveți un câmp care este în format dată/timp și trebuie să comparați, trebuie doar să schimbați formatul.

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

DACĂ doriți să să îl readuceți în format dată

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

Concluzie.

Având în vedere aceste cunoștințe, puteți converti fișierul pe care doriți să îl comparați în format AAAAMMDD sau AAAA-MM-DD sau în orice alt format an-lună-data, apoi puteți compara cu același format sysdate.

Prashant

Cred că puteți executa și această comandă:

select (sysdate-1) PREVIOUS_DATE from dual;

K142146 Syed Wasey Saeed

Sunt puțin confuz în legătură cu această parte „TO_DATE(TO_CHAR(CURRENT_DATE, ‘YYYY-MM-DD’),’YYYY-MM-DD’)”.Ce ați încercat să faceți cu această clauză? Formatul pe care îl afișați în rezultatul dvs. este formatul implicit atunci când executați interogarea de bază pentru a obține data din DUAL. În afară de asta, am făcut acest lucru în interogarea dvs. și a recuperat ziua precedentă „SELECT (CURRENT_DATE – 1) FROM Dual”. Anunțați-mă dacă funcționează pentru dvs. și, dacă nu, spuneți-mi care este problema. Mulțumesc și toate cele bune.