[ anon70939 @ 01.07.2014. 10:18 ] @
Code:
SELECT * FROM CUST
WHERE DATE BETWEEN to_date('01.06.2014','dd.mm.yyyy') and to_date('30.06.2014','dd.mm.yyyy')


S obzirom da mi je smaranje svaki put da brojim koji mesec ima koliko dana, a ne mogu za sve mesece da stavim da se zavrsavaju sa 31 jer dobijam gresku da taj datum ne postoji.

Postoji li neka jednostavnija varijanta tipa

where mm = 06 ili slicno?

[ djoka_l @ 01.07.2014. 10:29 ] @
to_char(datumska_varijabla, 'mm') vraća mesec.
[ djoka_l @ 01.07.2014. 10:54 ] @
Osim ovoga, postoji i funkcija LAST_DAY(datum) koja daje poslednji dan u mesecu za zadati datum, kao i funkcija EXTRACT koja ti daje mesec: EXTRACT(MONTH FROM datum)
[ darkosos @ 01.07.2014. 11:14 ] @
Ili npr:
Code:
SELECT * FROM CUST
WHERE trunc(DATE,'MONTH') = to_date('06.2014','mm.yyyy')
[ djoka_l @ 01.07.2014. 11:24 ] @
Uzgred, BETWEEN varijanta je zgodna ako je datumsko polje indeksirano i ako želiš da upit koristi taj indeks.
[ anon70939 @ 02.07.2014. 05:07 ] @
darkosos, to je to sto me bas interesovalo, hvala!

djoko, super za last_day, i to mi je par puta trebalo, nisam znao da postoji ta mogucnost.

[ anon70939 @ 03.12.2014. 09:54 ] @
Mnogo mi je pomoglo ovo, a s obzirom da se uglavnom radi o izvestajima za tekući mesec, uradio sam ovako.
Code (sql):

AND TRUNC(IA.INVOICE_DATE,'MONTH') = TRUNC(SYSDATE, 'month')


Kako sad to što jednostavnije da modifikujem da bude za prošli mesec?
[ Raspucin @ 03.12.2014. 10:08 ] @
Code:

AND TRUNC(IA.INVOICE_DATE,'MONTH') = TRUNC(ADD_MONTHS(SYSDATE,-1), 'month')


Pozdrav.
[ anon70939 @ 03.12.2014. 12:29 ] @
hvala :)


Sad sam se još više upetljao u ove stvari. Sjajno je i puno toga može da mi automatizuje da ne menjam neke izveštaje svakog meseca.

Potrebna mi je slična stvar ali za tekući mesec bez današnjeg dana.

Odradio sam ovako
Code (sql):
AND ia.invoice_date BETWEEN trunc(sysdate,'MM') AND trunc(sysdate-1)


Ali šta će biti kad bude bio prvi dan u mesecu? :)

I sad sam iskomplikovao nešto sa ovim
Code (sql):
AND CASE WHEN trunc(sysdate,'MM') = sysdate THEN TRUNC(IA.INVOICE_DATE,'MONTH') = TRUNC(SYSDATE, 'month') ELSE ia.invoice_date BETWEEN trunc(sysdate,'MM') AND trunc(sysdate-1)


izbacuje mi grešku na drugom znaku "=" po redu
[ _owl_ @ 03.12.2014. 13:34 ] @
Ne ide to tako, CASE vraća vrednost a ne izraz.
[ Raspucin @ 03.12.2014. 14:50 ] @
Citat:
CoyoteKG:

Potrebna mi je slična stvar ali za tekući mesec bez današnjeg dana.



Šta bi ti taj izveštaj vratio ako se izvrši prvog u mesecu ako je bez tog dana?

[ anon70939 @ 03.12.2014. 16:38 ] @
Ne znam. Videcu tek prvog.
Pretpostavljam da bi pukao izvestaj prilikom izvrsavanja.

[ Raspucin @ 03.12.2014. 19:42 ] @
Logično bi bilo (po mom mišljenju) da dobiješ podatke od početka meseca do tog trenutka, ali ako se traži da tekući dan bude isključen, onda tamo odakle se poziva taj izveštaj stavi da za tekući mesec nema podataka i zabrani pozivanje tog izveštaja prvog u mesecu za tekući mesec.
U svakom slučaju, bolje obradi slučaj nego da čekaš da vidiš šta će da se desi.
[ anon70939 @ 03.12.2014. 22:22 ] @
I meni se cini da bi bilo logicno, Ali videcemo.
Doduse mogao bih rucno da stavim u upit recimo

Code (sql):
 BETWEEN to_date('01.12.2014','dd.mm.yyyy') AND to_date('30.11.2014','dd.mm.yyyy')

pa da vidim sta ce da se desi :)


Odradicu prvog rucno taj izvestaj kao i do sada, ali cu probati i sa ovim gore da vidim da li ce biti greske
[ Raspucin @ 03.12.2014. 22:41 ] @
Citat:
CoyoteKG
pa da vidim sta ce da se desi :)


Pa desiće se da će taj between da ti da vreme zadnjeg dana novembra.

Code:

SQL> select to_char(to_date('01.12.2014','dd.mm.yyyy'), 'DD.MON.YYYY HH24:MI:SS')  as datum from dual;

DATUM
--------------------
01.DEC.2014 00:00:00


Funkcija to_date('01.12.2014','dd.mm.yyyy') daje vreme do ponoći "01.DEC.2014" odnosno od početka dana, tako da vreme na taj dan nije obuhvaćeno. Imaš gore primer kako možeš da se igraš sa datumima i upitima pa proveri tačno šta ti koja funkcija i uslov vraćaju pre nego što uglaviš to negde da mrda. Za slučaj da ne znaš, tip podatka DATE sadrži i vreme, samo što se ono po default-u ne prikazuje u rezultatima upita.