Üdv.
Hogyan kaphatom meg sql-ben, két dátum között eltelt időt?
Van egy jövö dátum ÉÉÉÉ-HH-NN ÓÓ:PP:MM és egy jelen dátum ÉÉÉÉ-HH-NN ÓÓ:PP:MM formátumban.
A kettő időpont közi időt szeretném megkapni ÉÉÉÉ-HH-NN ÓÓ:PP:MM-ba.
Üdv.
Hogyan kaphatom meg sql-ben, két dátum között eltelt időt?
Van egy jövö dátum ÉÉÉÉ-HH-NN ÓÓ:PP:MM és egy jelen dátum ÉÉÉÉ-HH-NN ÓÓ:PP:MM formátumban.
A kettő időpont közi időt szeretném megkapni ÉÉÉÉ-HH-NN ÓÓ:PP:MM-ba.
Az attól függ milyen adatbáziskezelőd van.
Egyébként intervallumot dátum formában számolni nem túl jó ötlet, biztos, hogy azt akarod?
Jester
Szia,
phpMyAdmin Verziószám: 3.5.2.2
A kérdés feltétele előtt probálgattam UNIX_TIMESTAMP() függvényt UNIX_TIMESTAMP() is aztán arra jutottam, valahol itt van a megoldás.
Idébélyegző formátumába is lehet, vagy ha lehet másképp(?), a lényeg az, hogy kitudjak hozni a két közötti eltelt időt ilyen formátumba:
ÉÉÉÉ-HH-NN ÓÓ:PP:MM
pl: A két időpont közötti eltelt idő 1év 1hónap 1nap 01 óra 01 perc 01 másodperc
Azért kell, mert SELECT DATE_ADD(NOW() meghatározok egy jövő időt azt átalakítom idébélyegző formátumába, az odáig megvan.
Viszont a jelen, és az adott x jövő időpont ha nem haladtuk el a jövő időpontot akkor kikéne számolni, hogy mennyi év hónap nap óra perc másodperc van vissza.
Vagy nagyon kéne egyszerűen és hatékonyan megoldani?
[ Szerkesztve ]
Szerk:lejárt az idő.
Kapok két Idébélyegző formátumot azt kivonom egymásból kapok egy számot.
Azt nem tudom átalakítani időpontra, vagyis áttudom, de nem azaz eredmény ami nekem kell.
A probléma az, hogy két időpont között ebben a formában lehet, hogy azonos eredményt kapsz amikor különböző időtartam volt valójában, hiszen az év illetve a hónapok hossza különbözhet.
Ha valami 1 hónapja volt, az függ attól az előző hónap milyen hosszú volt. Ha ez neked jó, akkor nincs gond.
Jester
A definíció alapján ki tudod számítani a percet órát, napot, hónapot, évet...
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Látom nem értitek mi a problémám.
Ha UNIX-ba számolok akkor kapok egy számot.
Tegyük fel van két dátum UNIX formátumba, egy jelen idő, és egy jövő idő.
A jövő idő egy nagyobb szám UNIX formátumba.
Azért nagyobb szám, mert az UNIX 1970. január 1. 00:00:00 számolja az időt.
Ha a nagyobb UNIX számból(jövő időből) kivonom kisebb UNIX számot(jelen idő) kapok egy értéket.
Ha azt a külömbségből létrejött UNIX értéket alakítom át dátummá UNIX_TIMESTAMP() függvénnyel akkor 1970. január 1. 00:00:00 közeli dátumot kapok mert az onnét számolja.
Különbséget kéne átalakítani, valahogy.
[ Szerkesztve ]
Csak az megint más érték lesz. Január 31 és március 1 között mennyi idő telt el?
bbTamas77: te nem definiáltad elég jól még a feladatot.
[ Szerkesztve ]
Jester
Én várom a javaslatokat, hogyan lehet megoldani, akár másképp, mert ehhez nekem kevés a jelenlegi tudásom az biztos.
Mivé kellene a különbséget átalakítani - ezt nem értjük még mindig?
sec = unixtime % 60 as int
min = CAST((unixtime / 60) as int) % 60
hour = CAST((unixtime / 3600) as int) % 24
day = unixtime / 86400) as int
Ennél hosszabbat csak a kiinduló dátum ismeretével lehet tudni a változó hosszúságú hónapok miatt.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Idő formátummá.
Ami megadja, hogy a két dátum között hány ÉÉÉÉ-HH-NN ÓÓ:PP:MM telt el.
[ Szerkesztve ]
Alant írtam, hogy mért nem tudod idő dátum formátummá alakítani, de még egyszer kicsit részletesebben:
- Dátummá nem tudod alakítani, mert nincs értelme. Hogy néz ki, hogy két dátum között eltelt 1 év november 19-e? A dátum ugyanis dátumot jelől, nem időtartamot. Két dátum között simán eltelhet két hónap és harminc nap, de ez 'dátum' formátumban nem értelmezhető (február 30).
- MSSQL 2008-on pl már használható a datetimeoffset típus erre a célra
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Egyáltalán nincs olyan függvény SQL-ben ami két időpont közötti értéket számol? Napokba évekbe amibe szeretnénk.
Annyi is elég lenne, ha napban órában és perceben és másodpercre tudná alakítani.
Itt írtam alant, hogy tudod kiszámolni.
Amúgy olyan sincs, hogy SQL... Milyen adatbázison szeretnéd megvalósíani?
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
dehogy nincs, Transact-SQL-ben a DATEDIFF fgv. ilyen. de az egy adott formátumban adja meg pl nap, vagy perc. teljes dátumba megadni nincs értelme, mert a hónapok nem azonos hosszúak, az évek sem.
hogy értsd: pl megadsz két dátumot, kijönne hogy különbség egy év, két hónap, 10 nap ... az a két hónap most hány nap is? tehát nem kapnál pontos értéket.
[ Szerkesztve ]
Fentiek alapján nap-óra-perc-másodperc például imígyen megkapható:
SELECT CONCAT((UNIX_TIMESTAMP('2013-12-24 18:00') - UNIX_TIMESTAMP('2013-08-01 18:49')) DIV 86400, ' ',
SEC_TO_TIME((UNIX_TIMESTAMP('2013-12-24 18:00') - UNIX_TIMESTAMP('2013-08-01 18:49')) % 86400))
Kicsit csúnya, hogy kétszer kell benne elvégezni a kivonást de a SEC_TO_TIME az csak korlátozott különbséget tud egyébként kezelni. A DATEDIFF pedig buta mert az idő részt figyelmen kívül hagyja.
[ Szerkesztve ]
Jester
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
VB-ben kéne valami kis trükk amivel dátum bevitelkor tudnék bizonyosakat kizárni.
Ezeket egy táblában letettem és kiértékeléskor ha a tiltó listán van, jelezném.
Ugye itt az IN nem működik.
If Me.datum in (select nap from datumok) Then
MsgBox "Erre a dátumra nem rögzíthet!", vbInformation
Exit Sub
Antonio Coimbra de la Coronilla y Azevedo, bizony!
Ha .net, akkor csinálsz egy SqlDataReader objektumot, aminek megadott az SQL utasítást (SELECT * FROM <tablad_neve> WHERE <datum_where>), ami visszaadja a dátumot, ha benne van a táblában.
"Debugging is like being the detective in a crime movie where you're also the murderer."
Hát nem éppen .Net, ez az MS Access VB-je.
De köszi, holnap megpróbálom valahogy összehozni.
Antonio Coimbra de la Coronilla y Azevedo, bizony!
Akkor meg:
dim rst as adodb.recordset
rst.open "SELECT * FROM <tábla> WHERE (datum=érték)", currentproject.connection
if rst.recordcount > 0 then
msgbox "baj van"
exit sub
end if
"Debugging is like being the detective in a crime movie where you're also the murderer."
Egy tárhelyszolgáltatónál pontosan fél órával többet mutat az SQL szerver NOW() függvénye, mint a jelenlegi GMT+2 időzóna ideje. Lehet ezzel kezdeni valamit? Elég kényelmetlen így használni.
Timezone-t le lehet kérdezni?
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Nem tudom milyen lekérdezésre gondolsz, de SELECT @@global.time_zone;-ra SYSTEM a válasz.
Ez a recordset működhet, csak hiányzik még neki valami.
"run-time error '91' object variable or with block variable not set"
Guglizom
Antonio Coimbra de la Coronilla y Azevedo, bizony!
Adott 2 tábla, az egyiket akarom összekötni a másikkal egy join-nal, majd a 2. tábla adott típusát szeretném listagg-al összefűzni, ahogy nézem mysql alatt a group_concat van. Viszont nekem ez felhoz mindent.
select
a.*,
group_concat(b.mezonev separator ',') as listagg
from tabla_1 a
left join tabla_2 b
on a.id = b.tabla_id
Szépen össze is fűzni, ellenben nem a join szerint, hanem az össze elemet ami abban a táblában van.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
(#1877) Speeedfire válasza Speeedfire (#1876) üzenetére
Érdekes mód a select részeb írva már jó volt.
select
a.*,
(select group_concat(b.mezonev separator ',') as listagg from tabla_2 where a.id =tabla_id) b
from tabla_1 a
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
left joint írtál be, nem inner joint. Mit is szeretnél pontosan?
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Mert left kell oda.
Adott 2 tábla.
Egy-több kapcsolat van a 2 tábla között és a 2. táblából egy adott sorát szerettem volna aggregálni egy oszlopba, de a selectes résszel tökéletesen megy. Csak a join-nál nem volt jó. A joinnál előbb összefűzte az összes sor értékét, nem pedig a join feltétel alapján a megfelelőket.
Apropó, ha már aggregálás erre van megoldás?
id | int1 | int2 | int3 | int4 ...
8 | 0 | 1 | 1 | 1
Ilyet szeretnék visszakapni.
id | opciok
8 | 2,3,4
A concat_ws()-t néztem rá, de nem a legjobb. Az csak összefűzi az oszlopokat. Nekem viszont valami case szerkezet kellene a concat_ws()-be, ami a megfelelő oszlop alapján ad vissza értéket, ha 1 a mező értéke.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
(#1880) Speeedfire válasza Speeedfire (#1879) üzenetére
Valami ilyesmit, amit utána concat_ws()-el fűznék össze, de nem hiszem, hogy nincs rá jobb megoldás.
select concat_ws(',',
`int1`,
`int2`,
`int3`,
`int4`,
`int5`,
`int6`
) as tipus
from (select
case
when `int1` = 1
then 1
end as int1,
case
when `int2` = 1
then 2
end as int2,
case
when `int3` = 1
then 3
end as int3,
case
when `int4` = 1
then 4
end as int4,
case
when `int5` = 1
then 5
end as int5,
case
when `int6` = 1
then 6
end as int6
from pelda) a;
De nem túl elegáns szerintem.
[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
(#1881) Apollo17hu válasza Speeedfire (#1880) üzenetére
Az nem lenne jó, ha előbb a 2. táblából csinálnál egyetlen konkatenált oszlopot (+ mellé az id oszlopot), majd az így kapott lekérdezést kötnéd (allekérdezésként) az 1. táblához?
SELECT ...
FROM tabla1
JOIN (SELECT tabla2.id, [konkatenált oszlopok]
FROM tabla2)
ON tabla1.id = tabla2.id
[ Szerkesztve ]
(#1882) Speeedfire válasza Apollo17hu (#1881) üzenetére
De utána hogyan szűröm?
Ha összekonkatenálom, akkor ilyen lesz. 0,1,0,0,1 nekem pedig ilyen kellene 2,5. Tehát az adott elem sorszáma.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
(#1883) Apollo17hu válasza Speeedfire (#1882) üzenetére
Ja, most már értem. Akkor én passzolom a témát.
Botlottam már hasonló problémába korábban, akkor úgy szerettem volna az értékeket összefűzni egy mezőbe, hogy az ismétlődések csak egyszer jelenjenek meg benne. Lényegében te is ezt csinálnád a nullértékekkel/nullákkal. Na, erre nincs normális függvény [prog.hu -n legalábbis nem tudtak segíteni, és gugli is csak olyan találatokat adott, ahol ciklusokat kell használni (PL/SQL)].
Esetleg ha úgy csinálnád, hogy:
SELECT
CASE WHEN a.int1 IS NOT NULL THEN a.int1 || ', ' END ||
CASE WHEN a.int2 IS NOT NULL THEN a.int2 || ', ' END ||
CASE WHEN a.int3 IS NOT NULL THEN a.int3 || ', ' END ||
CASE WHEN a.int4 IS NOT NULL THEN a.int4 || ', ' END ||
CASE WHEN a.int5 IS NOT NULL THEN a.int5 || ', ' END ||
a.int6
FROM (...) a
[ Szerkesztve ]
(#1884) Speeedfire válasza Apollo17hu (#1883) üzenetére
A group_concat() képes erre.
select group_concat(distinct mezonev separator ', ') as aggregate
from tabla
A fenti példámra egyelőre nem találok jobbat, szerintem max tárolt eljárással lehetne szebbet, de azt meg nem akarok osztott tárhelyen. Egyáltalán azt sem tudom lehet-e.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
(#1885) Apollo17hu válasza Speeedfire (#1884) üzenetére
Jövő héten ki fogom próbálni, pont az volt a gáz, hogy a listagg() függvény nem engedte a DISTINCT-et.
(#1886) Speeedfire válasza Apollo17hu (#1885) üzenetére
De listagg() csak oracle alatt van nem? A group_concat szerintem csak mysql specifikus. Bár a mysql oracle termék, szóval lehet van rá ilyen függvény.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
Szeretnék egy view-ot készíteni, de 3db union van benne. Illetve minden egyes select tartalmaz subselectet és join-t. Ezt így nem lehet megoldani?
Error 1349-et ír ki nekem rá.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
"Subqueries cannot be used in the FROM clause of a view. "
Igen, ezt láttam. De megoldást nem láttam rá. Max még több view-t készíteni, de az meg nem tudom mennyire elegáns.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
Hol használod? Mire? Tárolt eljárás? Minek kell ennyi subselect? Kód?
"Debugging is like being the detective in a crime movie where you're also the murderer."
Van egy jquery naptár, amiben több táblából kérdezek le, amiben vannak subselectek, többek között ilyenek, joinok. Majd ezeket a táblákat union all-al kötöm össze. Megy így is, csak jobb lenne egy view.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
Én biztosan nem próbálnék meg subselectes unionos viewkat használni, egy tárolt eljárásban szét kell szedni a feladatot, mert ez így nem lesz egy villám.
"Debugging is like being the detective in a crime movie where you're also the murderer."
Meglepődnék, hogy milyen gyors így is.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
Akkor viszont a subselectek helyett viewk, majd joinnal összekötöd ezeket.
"Debugging is like being the detective in a crime movie where you're also the murderer."
Köszi.
Viszont tegyük fel, hogy van egy tábla, ami tartalmaz egy nevet és egy ahhoz tartozó pontszámot.
Az odáig megvan, hogy kilistázom azt a 10 ember akinek legtöbb pontja van.
De azt hogyan kérem le, hogy egy adott ember hanyadik a toplistában?
Így: [link]
Kösz.
Megpróbálkozom vele.
Sziasztok
MSSQL-es Oracle kérdésem lenne
Hogy tudok egy stringet dátummá konvertálni?
Van egy alap query amiben a feltétel
where begintime > SYSDATE-1
én ezt akartam átírni erre
where begintime > '2013-08-12' de hibát kaptam -> literal does not match format string
ebből arra következtettem, hogy a '2013-08-12' sztringet dátummá kéne konvertálni, ami a DATE('2013-08-12')-vel nem sikerült, a neten meg csak ilyen találatok vannak
select convert(varchar, getdate(), 1) ami nekem nem jó.
Ötlet?
[ Szerkesztve ]
Használt a to_date függvényt.
TO_DATE('20020315', 'yyyymmdd')
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
sziasztok, segítsetek már légyszi
van egy tábla ami másik adatbázisban van, az It szerint van hozzá olvasási jogom.
adatbázis linkel elérem de nekem még sehogyse sikerült ráfuttatnom egy szimpla select *from-ot
így néz ki az adatbázis link:
drop database link xxxxxx;
create database link aaaaaaa connect to usernev identified by password using ’xxxxxx’
select *from tábla_xxxxxx
vmit rosszul írtam? sql szerint invalid character hibát kapok SQL Error: ORA-00911 ill ORA-00933
hogy kell egy sima selectet írni, ha a táblát adatbázis link-el érem el csak?
eladó dolgok:mondd az árát és vidd http://hardverapro.hu/tag/dellfanboy#aprohirdetesei