Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Povećavanje današnjeg datuma do odredjenog sa fiksnim danom

[es] :: MySQL :: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom

[ Pregleda: 2456 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FeelGood_84
Bijeljina

Član broj: 131278
Poruke: 23
*.telrad.net.



Profil

icon Povećavanje današnjeg datuma do odredjenog sa fiksnim danom14.05.2009. u 11:21 - pre 182 meseci
Pozdrav,

da li znate kako mogu da povećam današnji datum, npr. 14.5.2009. na 5.6.2009.

Bitno mi je da se mesec poveća za jedan a dan da bude 5. (peti) u mesecu?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom14.05.2009. u 11:52 - pre 182 meseci
add time ti nece odraditi posao posto ti uvek treba da je dan peti.. tako da .. moras da sklopis datum sam ...

http://dev.mysql.com/doc/refma...n/date-and-time-functions.html
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

Code:

mysql> SELECT STR_TO_DATE(CONCAT('05/', MONTH(NOW())+1, '/', YEAR(NOW())), '%d/%m/%Y');
+--------------------------------------------------------------------------+
| STR_TO_DATE(CONCAT('05/', MONTH(NOW())+1, '/', YEAR(NOW())), '%d/%m/%Y') |
+--------------------------------------------------------------------------+
| 2009-06-05                                                               | 
+--------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2009-05-14 12:49:43 | 
+---------------------+
1 row in set (0.00 sec)




mozes da dodas i vreme ako ti je potreban rezultat datetime a ne date ..

Code:

mysql> SELECT STR_TO_DATE(CONCAT('05/', MONTH(NOW())+1, '/', YEAR(NOW()), ' 00:00'), '%d/%m/%Y %H:%i');
+------------------------------------------------------------------------------------------+
| STR_TO_DATE(CONCAT('05/', MONTH(NOW())+1, '/', YEAR(NOW()), ' 00:00'), '%d/%m/%Y %H:%i') |
+------------------------------------------------------------------------------------------+
| 2009-06-05 00:00:00                                                                      | 
+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)




 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom14.05.2009. u 11:58 - pre 182 meseci
hm .. ne valja ..

Code:

mysql> SELECT STR_TO_DATE(CONCAT('05/', MONTH(@a)+1, '/', YEAR(@a)), '%d/%m/%Y');
+--------------------------------------------------------------------+
| STR_TO_DATE(CONCAT('05/', MONTH(@a)+1, '/', YEAR(@a)), '%d/%m/%Y') |
+--------------------------------------------------------------------+
| 2009-12-05                                                         | 
+--------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> set @a = '2009-12-01 00:00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT STR_TO_DATE(CONCAT('05/', MONTH(@a)+1, '/', YEAR(@a)), '%d/%m/%Y');
+--------------------------------------------------------------------+
| STR_TO_DATE(CONCAT('05/', MONTH(@a)+1, '/', YEAR(@a)), '%d/%m/%Y') |
+--------------------------------------------------------------------+
| NULL                                                               | 
+--------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> 


ne postoji 13 meseci .. cek sad ce smislimo nesto bolje
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom14.05.2009. u 12:05 - pre 182 meseci
evo - ovako radi

Code:

mysql> set @a = '2009-11-01 00:00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT STR_TO_DATE(CONCAT('05/', MONTH(ADDDATE(@a, INTERVAL 1 MONTH)), '/', YEAR(ADDDATE(@a, INTERVAL 1 MONTH))), '%d/%m/%Y');
+------------------------------------------------------------------------------------------------------------------------+
| STR_TO_DATE(CONCAT('05/', MONTH(ADDDATE(@a, INTERVAL 1 MONTH)), '/', YEAR(ADDDATE(@a, INTERVAL 1 MONTH))), '%d/%m/%Y') |
+------------------------------------------------------------------------------------------------------------------------+
| 2009-12-05                                                                                                             | 
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> set @a = '2009-12-01 00:00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT STR_TO_DATE(CONCAT('05/', MONTH(ADDDATE(@a, INTERVAL 1 MONTH)), '/', YEAR(ADDDATE(@a, INTERVAL 1 MONTH))), '%d/%m/%Y');
+------------------------------------------------------------------------------------------------------------------------+
| STR_TO_DATE(CONCAT('05/', MONTH(ADDDATE(@a, INTERVAL 1 MONTH)), '/', YEAR(ADDDATE(@a, INTERVAL 1 MONTH))), '%d/%m/%Y') |
+------------------------------------------------------------------------------------------------------------------------+
| 2010-01-05                                                                                                             | 
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom14.05.2009. u 12:06 - pre 182 meseci
umesto @a naravno mozes NOW() ili neku kolonu iz tabele ..
 
Odgovor na temu

FeelGood_84
Bijeljina

Član broj: 131278
Poruke: 23
*.telrad.net.



Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom14.05.2009. u 18:53 - pre 182 meseci
Odlično, hvala ti.

Veruj mi, pokušao sam na 100 načina, ali nisam uspeo. Hvala ti još jednom.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom14.05.2009. u 19:40 - pre 182 meseci
nema na cemu, vidis da sam i ja iz dva pokusaja .. dobro sam odma primetio da prvi pokusaj ne valja (problem sa 13tim mesecom) ..
 
Odgovor na temu

Huemaj

Član broj: 115981
Poruke: 25
..3.222.wireless.dyn.drei.com.



+5 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom17.06.2009. u 07:08 - pre 181 meseci
Pozdrav,

Imam dosta slican problem ovome pa bih zamolio za prijedloge kako biste ga vi rijesili. Zamislite da sklopite ugovor na godinu dana sa nekom firmom cije usluge koristite tokom trajanja ugovora, dan sklapanja ugovora je oznacen kao 'signupdate'. Svaki put kad kad iskoristite uslugu te firme tokom tih 12 mjeseci, ta usluga se dokumentira u vidu jednog recorda u tabeli, datum te usluge se pise u polje 'visitdate'. Ali u toku jednog mjeseca ne smijete koristiti jednu uslugu te firme vise od 4 puta. Znaci potrebna je mogucnost da se provjeri koliko puta sam u tekucem mjesecu iskoristio uslugu te firme. Ako je 'signupdate' recimo 22.03 znaci da aktuelni mjesec traje od 22.05.2009 do 22.06.2009.
Kako bi izgledala SQL-skripta koja racuna koliko usluga ste dobili u tekucem mjesecu ako znate samo 'signupdate', u nasem slucaju je 'signupdate' 22.03.2009. Kako biste vi rijesili taj problem?

Hvala na pomoci!
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom17.06.2009. u 07:34 - pre 181 meseci
Mnogo komplikuješ Bogdane jer si pogrešno pretpostavio. INTERVAL 1 MONTH ne menja dan u mesecu, što znači da je dovoljno da se uradi
DATE_ADD(@a, INTERVAL 1 MONTH)

Ja pretpostavljam da se u tabeli "visits_table" pravi novi rekord za svaki visit. Takođe, moraš nekako izračunati koji je ovo mesec po redu (što ne moraš u SQL da računaš).

SELECT COUNT(*)
FROM visits_table
WHERE visitdate BETWEEN DATE_ADD("2009-03-22", INTERVAL 1 MONTH) AND DATE_ADD("2009-03-22", INTERVAL 2 MONTH)

"Common sense is not so common." - Voltaire
 
Odgovor na temu

Huemaj

Član broj: 115981
Poruke: 25
80.122.56.*



+5 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom17.06.2009. u 10:57 - pre 181 meseci
Pozdrav,

Shinhane hvala na prijedlogu, ali moras uzeti u obzir da je poznat samo 'signupdate', a tekuci mjesec se naravno mijenja. Pored toga, mogu postojati vise hiljada korisnika u tabeli i svaki moze imati neki drugi 'signupdate', a htio bih pomocu SQL-a da izracunam za svakog korisnika koliko je proslo mjeseci od 'signupdate' do aktuelnog mjeseca. Znaci da SQL-Query moze donijeti vise recorda, npr:

Code:

user_id   signupdate   current_month_visit_count
-------   ----------   -------------------------
1         22.03.2009   2
2         09.12.2008   4
3         30.01.2008   0
4         14.02.2009   3
.......


Ima li neko prijedlog a da ne moram da koristim 'performance killer' funkcije poput String-funkcija? Kljuc rijesenja je da nadjem dinamicki, za svakog korisnika, pocetak tekuceg mjeseca i da izbrojim broj recorda po korisniku kod kojih je 'visitdate' veci od startnog datuma za tekuci mjesec.
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom18.06.2009. u 08:26 - pre 181 meseci
Ako je signupdate 31.01.2009. onda pretpostavljam da želiš da sledeći mesec počne zadnjeg dana u februaru (28.02.2009. ili 29.02.2012.)
Moj predlog je da dodaš novo polje "current_month" i da pokrećeš sledeći query svakog dana (recimo jedan minut posle ponoći):

UPDATE users_table
SET current_month = current_month + 1
WHERE DAYOFMONTH(signupdate) = DAYOFMONTH(NOW())
OR (LAST_DAY(NOW()) = DATE(NOW()) AND DAYOFMONTH(signupdate) > DAYOFMONTH(NOW()))

Onda za pravljenje izveštaja možeš koristiti:

SELECT u.user_id, u.signupdate, COUNT(v.id) AS current_month_visit_count
FROM users_table AS u
LEFT JOIN visits_table AS v ON u.user_id = v.user_id
WHERE v.visitdate BETWEEN DATE_ADD(u.signupdate, INTERVAL u.current_month MONTH) AND DATE_ADD(u.signupdate, INTERVAL u.current_month+1 MONTH)
GROUP BY u.user_id
"Common sense is not so common." - Voltaire
 
Odgovor na temu

Huemaj

Član broj: 115981
Poruke: 25
80.122.56.*



+5 Profil

icon Re: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom18.06.2009. u 15:22 - pre 181 meseci
Pozdrav,

Hvala za pomoc Shinhan, i meni je jedan scheduled task pao na um ali htio sam pokusati da problem rijesim preko SQL-a. Ja sam napisao jednu skriptu za koju sam se bojao da ce joj kompleksnost rasti veoma brzo sa porastom broja recorda, ali pokazala se veoma efikasnom. Kao sto sam rekao kljuc rijesenja je u pronalasku startnog datuma tekuceg mjeseca, zato cu postaviti ovdje samo WHERE klauzulu:
Code:


 AND tbf_t.date > 
          (
            STR_TO_DATE(CONCAT_WS('-', LEAST(DAY(jas.signup_date), DAY(LAST_DAY(NOW()))), MONTH(NOW()), YEAR(NOW())), '%d-%m-%Y')
            - INTERVAL (STR_TO_DATE(CONCAT_WS('-', LEAST(DAY(jas.signup_date), DAY(LAST_DAY(NOW()))), MONTH(NOW()), YEAR(NOW())), '%d-%m-%Y') > NOW()) MONTH
          )

Kao sto sam rekao ne svidja mi se kad moram u SQL-u koristiti String-funkcije, nadao sam se da se to moze rijesiti na elegantniji nacin. Ako neko sazna da li se problem moze rijesiti drugacije neka napise ovdje. do tada mozete koristiti ovo rijesenje i u vasim aplikacijama.


Veliki pozdrav!


[Ovu poruku je menjao Huemaj dana 18.06.2009. u 17:04 GMT+1]
 
Odgovor na temu

[es] :: MySQL :: Povećavanje današnjeg datuma do odredjenog sa fiksnim danom

[ Pregleda: 2456 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.