Zavrieť

Porady

MYSQL - SQL months_between

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
ahojte!
mam problem.
Chcem urobit select v mysql, kde potrebujem vediet kolko mesiacov prebehne medzi mesiacom x a mesiacom y a zobrazi sa v z. format datumu je yyyy-mm-dd
select z sql nefunguje.
select meno, xzacatek, ykonec, months_between (zacatek,konec) ztrvani from profi;
dakujem za rady.
Usporiadat
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

MySQL taku funkcu nema - http://dev.mysql.com/doc/refman/5.1/...functions.html

Mozes vypocitat rozdiel UNIX_TIMESTAMP a potom vysledok vydelit tak, aby vysiel v mesiacoch
0 0
Menej reklamy? Zaregistrujte sa! - Žiadne vyskakovacie reklamy!
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
TomasHC Pozri príspevok
MySQL taku funkcu nema - http://dev.mysql.com/doc/refman/5.1/...functions.html

Mozes vypocitat rozdiel UNIX_TIMESTAMP a potom vysledok vydelit tak, aby vysiel v mesiacoch
napises mi prosim ta ako si predstavujes cely prikaz?
0 0
monchi monchi

monchi je offline (nepripojený) monchi

neviem ci MySQL pozna funkciu convert, ale mohlo by to vypadat takto:
:

select zaciatok,koniec,(convert(integer,datepart(mm,zacia tok)) - convert(integer,datepart(mm,koniec))) as rozdiel
from tabulka
, v pripade ze roky nie su rovnake treba tam dorobit rozdiel na roky * 12 + rozdiel.

/M
0 0
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

MikiHalasko Pozri príspevok
napises mi prosim ta ako si predstavujes cely prikaz?
Code:
SELECT FLOOR(ABS(UNIX_TIMESTAMP('xxxxxx') - UNIX_TIMESTAMP('yyyyy')) / (3600 * 24 * 30))
xxxxx a yyyyy vo formate '2007-11-30 10:30:19'

Priklad:

Code:
FLOOR(ABS(UNIX_TIMESTAMP('2007-11-30 10:30:19') - UNIX_TIMESTAMP('2010-01-15 16:05:45')) / (3600 * 24 * 30))

Vysledok: 25
EDIT: Ale pocitam tam blbo na pevno mesiac = 30 dni, takze to treba pocitat cez 365,25 / mesiace , kvoli priestupnym rokom.

Nebude to jednoduchsie riesit na strane servra (PHP, ASP)?
0 0
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
mam format date yyyy-mm-dd aj si ho chcem nechat, celu databazu mam tak zalozenu. 25 tabuliek.
nefunguju vase rady.
neviem najst na nete priklad.
0 0
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

MikiHalasko Pozri príspevok
mam format date yyyy-mm-dd aj si ho chcem nechat, celu databazu mam tak zalozenu. 25 tabuliek.
nefunguju vase rady.
neviem najst na nete priklad.
Code:
SELECT FLOOR(ABS(UNIX_TIMESTAMP(CONCAT('zaciatok', ' 00:00:00')) - UNIX_TIMESTAMP(CONCAT('koniec', ' 00:00:00'))) / (3600 * 24 * 30))
Potom moze byt zaciatok aj koniec vo formate yyyy-mm-dd .

Treba si prestudovat dokumentaciu, su tam popisane vsetky textove, matematicke, kalendarne aj ine funkcie MySQL...

Priklad v praxi:

FLOOR(ABS(UNIX_TIMESTAMP(CONCAT('2008-05-12', ' 00:00:00')) - UNIX_TIMESTAMP(CONCAT('2010-08-29', ' 00:00:00'))) / (3600 * 24 * 30))

Vysledok: 27
0 0
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
TomasHC Pozri príspevok
Code:
SELECT FLOOR(ABS(UNIX_TIMESTAMP(CONCAT('zaciatok', ' 00:00:00')) - UNIX_TIMESTAMP(CONCAT('koniec', ' 00:00:00'))) / (3600 * 24 * 30))
Potom moze byt zaciatok aj koniec vo formate yyyy-mm-dd .

Treba si prestudovat dokumentaciu, su tam popisane vsetky textove, matematicke, kalendarne aj ine funkcie MySQL...

Priklad v praxi:

FLOOR(ABS(UNIX_TIMESTAMP(CONCAT('2008-05-12', ' 00:00:00')) - UNIX_TIMESTAMP(CONCAT('2010-08-29', ' 00:00:00'))) / (3600 * 24 * 30))

Vysledok: 27
taky vysledok, tosom nechcel
0 0
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

Takto sa neda radit...
0 0
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
ja viem, napriek tomu som to vyskusal, neva, diki
0 0
monchi monchi

monchi je offline (nepripojený) monchi

Skus toto:
select zaciatok,koniec,(convert(integer,montht(zacia tok)) - convert(integer,month(koniec))) as rozdiel
from tabulka

ak nepojde pastni sem chybovu hlasku.
/M
0 0
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

monchi Pozri príspevok
Skus toto:
select zaciatok,koniec,(convert(integer,montht(zacia tok)) - convert(integer,month(koniec))) as rozdiel
from tabulka

ak nepojde pastni sem chybovu hlasku.
/M
Nebude ten Tvoj kod pocitat maximalne do 12 mesiacov? Mam pocit, ze to nezohladnuje YEAR(zaciatok) a YEAR(koniec)
0 0
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

MikiHalasko: preco nepouzivas http://www.phpmyadmin.net/home_page/index.php na spravovanie MySQL databazy? Je to ovela komfortnejsie!
0 0
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
monchi Pozri príspevok
Skus toto:
select zaciatok,koniec,(convert(integer,montht(zacia tok)) - convert(integer,month(koniec))) as rozdiel
from tabulka

ak nepojde pastni sem chybovu hlasku.
/M
neda sa neda
0 0
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

Uz to mam, nemali tam byt uvodzovky

SELECT zacatek, konec, FLOOR( ABS( UNIX_TIMESTAMP( CONCAT( zacatek, ' 00:00:00' ) ) - UNIX_TIMESTAMP( CONCAT( konec, ' 00:00:00' ) ) ) / ( 3600 *24 *30 ) ) AS rozdiel
FROM profi
0 0
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
TomasHC Pozri príspevok
Uz to mam, nemali tam byt uvodzovky

SELECT zacatek, konec, FLOOR( ABS( UNIX_TIMESTAMP( CONCAT( zacatek, ' 00:00:00' ) ) - UNIX_TIMESTAMP( CONCAT( konec, ' 00:00:00' ) ) ) / ( 3600 *24 *30 ) ) AS rozdiel
FROM profi
vysledok
0 0
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
TomasHC Pozri príspevok
MikiHalasko: preco nepouzivas http://www.phpmyadmin.net/home_page/index.php na spravovanie MySQL databazy? Je to ovela komfortnejsie!
nerozumiem po anglicky.
0 0
TomasHC TomasHC

TomasHC je offline (nepripojený) TomasHC

MikiHalasko Pozri príspevok
nerozumiem po anglicky.
http://navody.c4.cz/phpmyadmin-instalace

Nie kazdy moze byt programator
0 0
PaloPa PaloPa

PaloPa je offline (nepripojený) PaloPa

Napríklad takto

Funkcia:
Code:
CREATE FUNCTION f_months_between( p_end DATE , p_start DATE ) RETURNS MEDIUMINT RETURN PERIOD_DIFF( EXTRACT(YEAR_MONTH FROM p_end) , EXTRACT(YEAR_MONTH FROM p_start) );
Použitie:
Code:
SELECT `tbl_content`.`created`, `tbl_content`.`modified`, f_months_between( `tbl_content`.`modified` , `tbl_content`.`created` ) as x_month_diff
FROM `tbl_content`
... za predpokladu že created a modified sú typu datetime

Palo
Naposledy upravil PaloPa : 02.06.10 at 10:46
0 0
monchi monchi

monchi je offline (nepripojený) monchi

select zaciatok,koniec,((cast(month(zaciatok) as unsigned) - cast(month(koniec) as unsigned)) + (cast(year(zaciatok) as unsigned) - cast(year(koniec) as unigned)*12))
as rozdiel
from tabulka

najskor skus len s mesiacom a ked pojde tak pridaj rok

/M
0 0
MikiHalasko MikiHalasko

MikiHalasko je offline (nepripojený) MikiHalasko

Moje meno je Halász, Mikuláš Halász. Som kreatívny a milujem online marketing. Rád pomáham ľuďom predávať svoje služby pomocou internetu. ...viac
monchi Pozri príspevok
select zaciatok,koniec,((cast(month(zaciatok) as unsigned) - cast(month(koniec) as unsigned)) + (cast(year(zaciatok) as unsigned) - cast(year(koniec) as unigned)*12))
as rozdiel
from tabulka

najskor skus len s mesiacom a ked pojde tak pridaj rok

/M
mam format date yyyy-mm-dd
0 0
Načítať ďalšie

Sleduj porady, ktoré by vás mohli zaujímať