Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Oracle: Trunc rundet auf oder nicht (https://www.delphipraxis.net/191391-oracle-trunc-rundet-auf-oder-nicht.html)

p80286 10. Jan 2017 13:18

Datenbank: oracle • Version: ? • Zugriff über: egal

Oracle: Trunc rundet auf oder nicht
 
Hallo zusammen,

die Oracle-Doku ist etwas widersprüchlich was
Code:
TRUNC
angeht.
zum einen dieses Beispiel:
Code:
SELECT TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR')
  "New Year" FROM DUAL;
 
New Year
---------
01-JAN-92
zum anderen unter "ROUND and TRUNC Date Functions":
Zitat:

Year (rounds up on July 1)
Month (rounds up on the sixteenth day)
Dieses Aufrunden ist mir allerdings noch nie über den Weg gelaufen. Im allgemeinen setze ich
Code:
trunc(sysdate,'MONTH')
trunc(sysdate,('YEAR')
trunc(add_months(sysdate,-1),'MONTH') -- Vormonat
ein und es funktioniert so wie ich mir das vorstelle, jeweils der 1. Tag wird ausgegeben, auch wenn ich den 31/30 des Monats bzw. einem Monat größer Juni benutze.

Was hat das mit dem aufrunden auf sich?

Gruß
K-H

Jumpy 10. Jan 2017 13:31

AW: Oracle: Trunc rundet auf oder nicht
 
Wahrscheinlich bezieht sich das auf "Round", nicht auf "Trunc"?
Trunc schneidet nur ab, wie der Name schon sagt.

Probier mal:
SELECT ROUND(TO_DATE('180916','DDMMYY'),'YEAR') AS D FROM DUAL
vs
SELECT ROUND(TO_DATE('180416','DDMMYY'),'YEAR') AS D FROM DUAL

himitsu 10. Jan 2017 13:36

AW: Oracle: Trunc rundet auf oder nicht
 
Was ist daran wiedersprüchlich?
Trunc schneidet ab, bzw. es rundet gegen 0.

01-JAN-92 00:00 ist nunmal der Anfang des Jahres, also das was übrig bleibt, wenn man alles Andere entfernt/abschneidet, also auf "0" bzw. Anfang zurück setzt.

p80286 10. Jan 2017 13:52

AW: Oracle: Trunc rundet auf oder nicht
 
Zitat:

Zitat von Jumpy (Beitrag 1358594)
Wahrscheinlich bezieht sich das auf "Round", nicht auf "Trunc"?

Danke das wars,
bei so vielen eierlegenden Wollmilchsäuen vergisst man zu oft den gesunden Menschenverstand einzusetzen.

@Himitsu
Naja zuerst hatte ich TRUNC auch wörtlich genommen und war ein wenig verwundert, daß
Code:
Trunc(to_date('20150505','YYYYMMDD'),'YEAR')
2015-01-01 liefert und nicht nur 2015 (ok ist ein Date Format), aber da traue ich denen auch ein aufrunden zu :oops:

vielen Dank
K-H

mkinzler 10. Jan 2017 13:53

AW: Oracle: Trunc rundet auf oder nicht
 
Bei negativen Zahlen "rundet" TRUNC auch auf :stupid:

himitsu 10. Jan 2017 14:19

AW: Oracle: Trunc rundet auf oder nicht
 
Zitat:

Zitat von p80286 (Beitrag 1358596)
2015-01-01 liefert und nicht nur 2015 (ok ist ein Date Format)

2015 ist auch eine Zahl und kein Datum.
Mit Datum ist es nunmal 2015-01-01 und nicht 2015.
EXTRACT :roll:

Zitat:

Zitat von p80286 (Beitrag 1358596)
aber da traue ich denen auch ein aufrunden zu :oops:

Jupp, es kommt nur darauf an, wo bei Oracle dort die 0 liegt.
Im Jahr 1, im Jahr 0 (was es eigentlich nicht gibt), am 1899-12-30 (TDateTime) oder bei 1 aka 1970-01-01 (Unix Timestamp, wo es auch keine 0 gibt).


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz