Hirdetés

2024. május 1., szerda

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)

Hozzászólások

(#1851) bbTamas77


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.

(#1852) Jester01 válasza bbTamas77 (#1851) üzenetére


Jester01
veterán

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

(#1853) bbTamas77 válasza Jester01 (#1852) üzenetére


bbTamas77
aktív tag

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 ]

(#1854) bbTamas77 válasza bbTamas77 (#1853) üzenetére


bbTamas77
aktív tag

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.

(#1855) Jester01 válasza bbTamas77 (#1853) üzenetére


Jester01
veterán

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

(#1856) sztanozs válasza bbTamas77 (#1854) üzenetére


sztanozs
veterán

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...

(#1857) bbTamas77 válasza sztanozs (#1856) üzenetére


bbTamas77
aktív tag

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 ]

(#1858) Jester01 válasza sztanozs (#1856) üzenetére


Jester01
veterán

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

(#1859) bbTamas77 válasza Jester01 (#1858) üzenetére


bbTamas77
aktív tag

Én várom a javaslatokat, hogyan lehet megoldani, akár másképp, mert ehhez nekem kevés a jelenlegi tudásom az biztos.

(#1860) sztanozs válasza bbTamas77 (#1857) üzenetére


sztanozs
veterán

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...

(#1861) bbTamas77 válasza sztanozs (#1860) üzenetére


bbTamas77
aktív tag

Idő formátummá.

Ami megadja, hogy a két dátum között hány ÉÉÉÉ-HH-NN ÓÓ:PP:MM telt el.

[ Szerkesztve ]

(#1862) sztanozs válasza bbTamas77 (#1861) üzenetére


sztanozs
veterán

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...

(#1863) bbTamas77 válasza sztanozs (#1860) üzenetére


bbTamas77
aktív tag

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.

(#1864) sztanozs válasza bbTamas77 (#1863) üzenetére


sztanozs
veterán

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...

(#1865) DS39 válasza bbTamas77 (#1863) üzenetére


DS39
nagyúr

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 ]

(#1866) Jester01 válasza bbTamas77 (#1863) üzenetére


Jester01
veterán

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

(#1867) bambano válasza bbTamas77 (#1861) üzenetére


bambano
titán

postgresql dátum függvények

[ Szerkesztve ]

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1868) Petya25


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 Sub

Antonio Coimbra de la Coronilla y Azevedo, bizony!

(#1869) Ispy válasza Petya25 (#1868) üzenetére


Ispy
veterán

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."

(#1870) Petya25 válasza Ispy (#1869) üzenetére


Petya25
addikt

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!

(#1871) Ispy válasza Petya25 (#1870) üzenetére


Ispy
veterán

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."

(#1872) #68216320


#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.

(#1873) sztanozs válasza #68216320 (#1872) üzenetére


sztanozs
veterán

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...

(#1874) #68216320 válasza sztanozs (#1873) üzenetére


#68216320
törölt tag

Nem tudom milyen lekérdezésre gondolsz, de SELECT @@global.time_zone;-ra SYSTEM a válasz.

(#1875) Petya25 válasza Ispy (#1871) üzenetére


Petya25
addikt

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!

(#1876) Speeedfire


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_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


Speeedfire
nagyúr

Érdekes mód a select részeb írva már jó volt. :U

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

(#1878) amargo válasza Speeedfire (#1876) üzenetére


amargo
addikt

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!”

(#1879) Speeedfire válasza amargo (#1878) üzenetére


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 | 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


Speeedfire
nagyúr

Valami ilyesmit, amit utána concat_ws()-el fűznék össze, de nem hiszem, hogy nincs rá jobb megoldás. :N

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. :N

[ 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


Apollo17hu
őstag

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


Speeedfire
nagyúr

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


Apollo17hu
őstag

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


Speeedfire
nagyúr

A group_concat() képes erre. :K

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. :N

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


Apollo17hu
őstag

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


Speeedfire
nagyúr

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. :K

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1887) Speeedfire


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? :U
Error 1349-et ír ki nekem rá. :O

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1888) bpx válasza Speeedfire (#1887) üzenetére


bpx
őstag

[link]

"Subqueries cannot be used in the FROM clause of a view. "

(#1889) Speeedfire válasza bpx (#1888) üzenetére


Speeedfire
nagyúr

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

(#1890) Ispy válasza Speeedfire (#1889) üzenetére


Ispy
veterán

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."

(#1891) Speeedfire válasza Ispy (#1890) üzenetére


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. :B

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1892) Ispy válasza Speeedfire (#1891) üzenetére


Ispy
veterán

É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."

(#1893) Speeedfire válasza Ispy (#1892) üzenetére


Speeedfire
nagyúr

Meglepődnék, hogy milyen gyors így is. :K

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1894) Ispy válasza Speeedfire (#1893) üzenetére


Ispy
veterán

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."

(#1895) bbTamas77 válasza Jester01 (#1866) üzenetére


bbTamas77
aktív tag

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?

(#1896) DS39 válasza bbTamas77 (#1895) üzenetére


DS39
nagyúr

Így: [link]

(#1897) bbTamas77 válasza DS39 (#1896) üzenetére


bbTamas77
aktív tag

Kösz. :)

Megpróbálkozom vele. :))

(#1898) Jim-Y


Jim-Y
veterán

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 ]

(#1899) Speeedfire válasza Jim-Y (#1898) üzenetére


Speeedfire
nagyúr

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

(#1900) dellfanboy


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_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

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.