Új hozzászólás Aktív témák
-
bbTamas77
aktív tag
Ü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. -
bbTamas77
aktív tag
válasz Jester01 #1852 üzenetére
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 ]
-
Jester01
veterán
válasz bbTamas77 #1853 üzenetére
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
-
sztanozs
veterán
válasz bbTamas77 #1854 üzenetére
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...
-
bbTamas77
aktív tag
válasz sztanozs #1856 üzenetére
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 ]
-
sztanozs
veterán
válasz bbTamas77 #1857 üzenetére
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 intEnné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...
-
sztanozs
veterán
válasz bbTamas77 #1861 üzenetére
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élraJOGI 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...
-
sztanozs
veterán
válasz bbTamas77 #1863 üzenetére
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...
-
DS39
nagyúr
válasz bbTamas77 #1863 üzenetére
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 ]
-
Jester01
veterán
válasz bbTamas77 #1863 üzenetére
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
-
Petya25
addikt
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 SubAntonio Coimbra de la Coronilla y Azevedo, bizony!
-
Ispy
veterán
válasz Petya25 #1868 üzenetére
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."
-
Ispy
veterán
-
#68216320
törölt tag
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.
-
Speeedfire
nagyúr
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_idSzé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
-
Speeedfire
nagyúr
válasz 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 aFotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
amargo
addikt
válasz Speeedfire #1876 üzenetére
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!”
-
Speeedfire
nagyúr
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 | 1Ilyet szeretnék visszakapni.
id | opciok
8 | 2,3,4A 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
-
Speeedfire
nagyúr
válasz 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
-
Apollo17hu
őstag
válasz 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 ]
-
Speeedfire
nagyúr
válasz 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
-
Apollo17hu
őstag
válasz 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 ]
-
Speeedfire
nagyúr
válasz Apollo17hu #1883 üzenetére
A group_concat() képes erre.
select group_concat(distinct mezonev separator ', ') as aggregate
from tablaA 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
-
Apollo17hu
őstag
válasz 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.
-
Speeedfire
nagyúr
válasz 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
-
Speeedfire
nagyúr
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
-
bpx
őstag
válasz Speeedfire #1887 üzenetére
"Subqueries cannot be used in the FROM clause of a view. "
-
Ispy
veterán
válasz Speeedfire #1889 üzenetére
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."
-
Speeedfire
nagyúr
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
-
Ispy
veterán
válasz Speeedfire #1891 üzenetére
É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."
-
Ispy
veterán
válasz Speeedfire #1893 üzenetére
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."
-
-
Jim-Y
veterán
Sziasztok
MSSQL-es Oracle kérdésem lenneHogy 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 ]
-
dellfanboy
senior tag
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_xxxxxxvmit 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