Hirdetés

2024. május 3., péntek

Gyorskeresés

Útvonal

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

Hozzászólások

(#4201) Louro válasza martonx (#4200) üzenetére


Louro
őstag

Gondolom nálatok is egy interjún, egy szimpla SELECT feladat láttán, ha azt kérné a jelentkező, hogy szóban elmondhatja e, hogy hogyan oldaná meg, ti is elkerekedett szemekkel kérnétek, hogy mondja. (Egy adatelemző ne beszéljen, kódoljon és értelmezzen :) )

Előző munkahelyemen Oracle volt és ott a temptáblát a többsége simán CREATE TABLE-DROP megoldással kezelte. (Mondjuk én CTE-párti vagyok, de sok kifinomult megoldás van a szemét elkerülésére.)

Mess with the best / Die like the rest

(#4202) kezdosql


kezdosql
tag

Letezik az osregi Clipper-hez hasonlo adatbaziskezelo program?
Az a lenyeg, hogy a vegen csak egy exe program legyen az adott feladatra.

(#4203) bambano válasza kezdosql (#4202) üzenetére


bambano
titán

egyrészt a clipper nagyon jól fut dosemuban.
másrészt létezik, flagship néven.

szerk: persze lehet, hogy félreértettelek. ha az az elvárás, hogy egy exe legyen, ami clipper kompatibilis adatbázisokat kezel, akkor flagship. ha az az elvárás, hogy egy exe, akkor beépíthető, külön telepítést nem igénylő adatbáziskezelő van kilószám, akár firebird, akár más.

[ Szerkesztve ]

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

(#4204) martonx válasza kezdosql (#4202) üzenetére


martonx
veterán

Sqlite pl

Én kérek elnézést!

(#4205) RedHarlow


RedHarlow
aktív tag

Sziasztok,

Szeretnék automatizálni egy SQL lekérdezést úgy, hogy minden hónap elsején fusson le, az eredményeket pakolja hozzá egy excel tábla új soraiba majd küldje el e-mailben. Ti mivel/hogy oldanátok meg a taskot?

Előre is köszönöm a segítséget!

(#4206) Louro válasza RedHarlow (#4205) üzenetére


Louro
őstag

Környezet? Oracle, SSMS, .... ? Ez eléggé függ attól.

Röviden azt mondanám általánosságban, hogy legyen egy IF elágazás, ahol megmondod, hogy az aktuális nap a hónap első napja, akkor fusson el, különben ugorja át. Majd ezt az egészet egy package-be :)

Én TSQL-lel is pakolok olykor ki, bár tudom, hogy nagyon retro és inkább SSIS kellene, de lusta vagyok egy exportra package-et készíteni :)

Mess with the best / Die like the rest

(#4207) Louro válasza RedHarlow (#4205) üzenetére


Louro
őstag

Hogy konkrétabb legyek (TSQL megoldás):

IF DAY(GETDATE()) = 1
BEGIN
--Leválogatás kitétele
EXEC master.dbo.xp_cmdshell 'sqlcmd -S "SERVERNAME" -d ADATBÁZISNÉV -E -o "C:\Windows\System32\passwords.txt" -Q "SELECT * FROM table" -W -w 999 -s";" '

--Emailküldés
DECLARE @HTML VARCHAR(2000);

SET @HTML = 'Ide azt pakolsz, amit szeretnél' ;

EXEC msdb.dbo.sp_send_dbmail
@recipients = 'címzett@itcafe.hu',
@subject = 'Tárgy',
@file_attachments = N'C:\Windows\System32\passwords.txt',
@body = @HTML,
@body_format = 'HTML';
END

Beteheted napi futásba is, nem fogja elvinni az erőforrást. Vagy kihagyod az IF-es részt és a Schedule részben megadod, hogy minden hónap első napján fusson le.

Persze igényesebb megoldás lenne SSIS Package-be tenni. De feladat méretétől függ. Az apró lekérdezéseket inkább így oldom meg.

[ Szerkesztve ]

Mess with the best / Die like the rest

(#4208) RedHarlow válasza Louro (#4207) üzenetére


RedHarlow
aktív tag

Szia, köszi a segítséget. Ez működhet linuxon lévő DB alatt is, Linux + oracle párosról van szó. SQLdeveleoperrel szoktuk futtatni az SQL-eket.

(#4209) rum-cajsz válasza RedHarlow (#4208) üzenetére


rum-cajsz
őstag

ha linuxot használsz, annak van egy nagyon jó ütemezője a cron. Azzal gyakorlatilag bármilyen ütemezést be tudsz állítani. Bár az excel és a mail küldés még külön programot igénylenek.
A szkriptet kell megírnod egyedül, kell egy oracle kliens, amiben sqlplus programot tudod parancssorban használni. pl. ez minden óra 27 perckor lefut
cron bejegyzés:
27  * * * * /home/user/sqlscript/napifutas.sh

napifutas.sh
ScriptHome="/home/user/sqlscript"
PwFile="$PasswdHome/jelszo.txt"
secret=UserName/$(< $PwFile)@adatbazis
sqlplus -s <<EOF
$secret
@$ScriptHome/sajatscript.sql
EOF

[ Szerkesztve ]

=Kilroy was here============================ooO=*(_)*=Ooo=======

(#4210) RedHarlow válasza rum-cajsz (#4209) üzenetére


RedHarlow
aktív tag

Igen ismerem a cront, a probléma ott kezdődik, hogy hogy mentem excelbe az adatokat. Rendszeresen ki kell küldenünk bizonyos illetőknek adatokat excelben, dátumozva. Kettőt minden hónap elsején a harmadikat minden szerdán. Jelenleg windowson sql developerrel kérik le az adatokat és onnan másolják ki az excelben aztán outlook fájlok csatolása, küldés. Ezt szeretném valahogy automatizálni.

[ Szerkesztve ]

(#4211) kezdosql válasza martonx (#4204) üzenetére


kezdosql
tag

Szerintem nem ertetted a kerdest.
Mutass egyetlen kepernyokepet, hogyan csinalsz exe-t a forraskodbol.

(#4212) kezdosql válasza bambano (#4203) üzenetére


kezdosql
tag

Igen, felreertetted teljesen.

A Clipper az egy jo megoldas volt a problemara, hogy laikusokat tavol kell tartani az adatoktol.
dBase adatbazisokat kezelt (szerintem inkabb tablakat, mert sql akkor meg nem volt) es dBase programokat hasznalt, kesobbi verzioja mar mas programokbol is elfogadott bizonyos reszeket.

A nagy elonye az volt, hogy amikor a forraskodok keszen voltak, a program minden resze mukodott, akkor leforditva volt egy exe program azt kellett elinditani, es a buta user csak azt tehette, amit a menuk reven elerhetett. A buta user boldog volt, mert latta az adatokat menuben, listaban, tablazatban, ahogy menuk kozott valtott, es biztonsagos volt, nem volt lehetoseg adatokba belebarmolni.

Az sql megjelenesevel kellett egy php, vagy c vagy mas program, amivel lehetett kezelni es megjeleniteni az adatokat, majd jott a bongeszos megoldas, amihez html, css es javascript is kellett, es persze servert kell telepiteni, frissiteni, upgradelni, stb.

A buta userek pedig ragaszkodnak a tablazatkezelos megjeleniteshez, mert ok azt ertik, ezert el az excel evtizedekkel az elavulasa ota is.

A kerdesem az volt, hogy van-e olyan megoldas, hogy amikor kesz egy sql adatbazis lekerdezeset es megjeleniteset megoldo forraskod, azt leforditva van egy exe fajl es nem kell servert telepiteni, stb.

Egy jo pelda a hataridonaplok esete. Rengeteg egyszeru es bonyolult megoldas letezik ra, valoszinuleg a tobbseget c-ben vagy hasonlo nyelven irtak, de egyikkel se lehet teljes koru keresest vegezni, mert mindegyik csak a dBase-n alapulo szemlelettel mukodik, egy szempont szerint lehet keresni, komplex modon nem, amit az sql lehetove tesz.

Most szenvedunk rendesen, mert kenyszerusegbol egy excel tablaban vannak adatok, amit jellemzoen negyfele adat - datum, meret, szin, hely - tetszoleges kombinaciojaval kell keresni, amihez az excel tablat mindig at kell rendezni, emiatt allandoak user error-ok.:-(

Ha lenne egy egyszeru alkalmazas, ami csak annyit tud, hogy negy adat tetszoleges kombinaciojara lehet vele keresni, sot szurni a megjelenitendo adatokat, meglenne a boldogsag.

(#4213) velizare válasza RedHarlow (#4210) üzenetére


velizare
nagyúr

legyen csv. azt tudja kezelni az excel is.

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4214) rum-cajsz válasza RedHarlow (#4210) üzenetére


rum-cajsz
őstag

Vagy csv fájlt adtok, vagy írtok erre egy célprogramot. Mi egy saját, pár soros java programmal oldjuk meg ezt, azt ugyanígy ütemezheted cronnal aztán és átadhatod egy mail sendernek is az eredményt.

=Kilroy was here============================ooO=*(_)*=Ooo=======

(#4215) Ispy válasza kezdosql (#4212) üzenetére


Ispy
veterán

Az adatbáziskezelő szoftverek így működnek: van egy valamilyen backend (SQL server pl.) és van a frontend (.net pl.), ami lekérdez, megjelenít, keres stb., de ezt konyhakészen nem kapod meg, meg kell csinálni, erre vannak a programozók.

A legegyszerűbb megoldás, amivel egy laikus is eltud kezdeni dolgozni, az mondjuk egy MS Access, az összes többi megoldás ettől fényévekre van. De ahhoz meg office kell....

[ Szerkesztve ]

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#4216) Petya25


Petya25
addikt

MS SQL-ben egy idősorban szeretnék átlagot nézni, valami tipp erre?

03:27:05
03:48:25
03:53:22
03:54:17

és Excelben erre simán (=ÁTLAG(A1:A4))

3:45:47

Antonio Coimbra de la Coronilla y Azevedo, bizony!

(#4217) Louro válasza Petya25 (#4216) üzenetére


Louro
őstag

Szia,

egy minta....bár ezért nem csípem az MSSQL-t....tengernyi sok CONVERT kell sokszor.

;WITH base AS (
SELECT GETDATE()-10 t
UNION
SELECT GETDATE()-8
UNION
SELECT GETDATE()
)
SELECT CONVERT(DATETIME,AVG(CONVERT(FLOAT,t)))
FROM BASE

Szóval először FLOAT-ba alakítod, majd a kapott átlagot visszaalakítod dátummá.Remélem tudtam segíteni.

[ Szerkesztve ]

Mess with the best / Die like the rest

(#4218) Louro válasza Louro (#4217) üzenetére


Louro
őstag

Ha HH:MI:SS kell, akkor
SELECT CONVERT(CHAR,CONVERT(DATETIME,AVG(CONVERT(FLOAT,t))),108)
FROM BASE

Időt előbb FLOAT-ba alakítod, majd átlagolod. A számot utána dátummá visszakonvertálod és abból kiszeded az időpontot. Ha csak óra és perc kell, akkor CHAR(5) ;)

Oracle után szinte falnak szaladtam ennyi konvertálás láttán. M$ eléggé köti az ebet a karóhoz az adattípusaival.

Mess with the best / Die like the rest

(#4219) Petya25 válasza Louro (#4218) üzenetére


Petya25
addikt

Köszi, de még mindig azzal küzdök, hogy az időt nem konvertálja szám formába.
"Explicit conversion from data type time to float is not allowed."

Olyan megoldást találtam a neten hogy az óra egységeit váltsuk át és összegezzük másodpercben int-ben. Na jó, aztán meg számoljam vissza a 127562-ből hogy az hány óra hány perc...
Excelben meg simán 5 karakteren megcsinálja az átlagot ugyanaz a cég...

Antonio Coimbra de la Coronilla y Azevedo, bizony!

(#4220) martonx válasza kezdosql (#4211) üzenetére


martonx
veterán

Nem értettem félre :)
Exe készítésre megvannak a bevált módszerek, erre valók az installer készítő programok, amiknek megadod a forráskódod, és a végén kapsz egy szép nagy exe-t.
Én C#-ot használok, az jelen verziójában imád a végső exe mellé egy csomó kis dll függőséget pakolni, bezip-eled, a user kizipeli egy mappába, és máris ott az exe, amit kattintgathat. Ha a zip nem tetszik, akkor jön a setup készítők tömkelege, válassz egy szimpatikusat, és az csinál egy szép setup varázslót, amit a user next-next-finish-el végignyom.

A 3.0-ás verziójától kezdve (ami várhatóan szeptemberben jelenik meg), viszont már out-of-the-box tud a .net core is egy szál óriás exe-t csinálni neked: [link]

Én kérek elnézést!

(#4221) velizare válasza Petya25 (#4219) üzenetére


velizare
nagyúr

a fekete mágiát megcsinálja helyetted a time_to_sec, és a sec_to_time. közéjük beversz egy avg-t.

select SEC_TO_TIME(avg(TIME_TO_SEC(ido))) from tabla;
a törtet kerekíti levágja.

feltétele, hogy az ido, az time(6), és a jelentése nem időpont, hanem időtartam.

[ Szerkesztve ]

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4222) Louro válasza velizare (#4221) üzenetére


Louro
őstag

Ehhez jó lenne tudni, hogy melyik SQL Server van fent. Ha 2012 előtti, akkor HA jól tudom még nem volt benne ez a függvény.

Mess with the best / Die like the rest

(#4223) Ispy válasza martonx (#4220) üzenetére


Ispy
veterán

Ezt írta a végén:

"Ha lenne egy egyszeru alkalmazas, ami csak annyit tud, hogy negy adat tetszoleges kombinaciojara lehet vele keresni, sot szurni a megjelenitendo adatokat, meglenne a boldogsag."

Ebből nekem az jön le, hogy nincsen kész program, igaz közben minden mást is írt, elég zavaros, de ez alapján nincsen mit csomagolni, szvsz.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#4224) velizare válasza Louro (#4222) üzenetére


velizare
nagyúr

ha server, akkor egyik sem, a t-sql ezt nem tudja, csak a mysql. nyilván 2008től érdemes ezzel t-sql-lel is próbálkozni, mert az vezette be a time adattípust.

a time_to_sec egyszerűen helyettesíthető egy datediff-fel, (datediff(s,0,ido)), viszont a visszaalakítás az problémás lehet.
erre adja magát a dateadd (ie.: select dateadd(s, avg(datediff(s,0,ido)), 0) from tabla;), de az date formátumot az vissza, ezt még vissza kell csapni time-ba egy converttel. viszont a convert truncol, ott bukjuk a 24 órát meghaladó részét. mondjuk ha ez olyan, akkor a time egyáltalán nem használható.

[ Szerkesztve ]

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4225) Petya25 válasza velizare (#4224) üzenetére


Petya25
addikt

2008-as MS SQL

A táblában datetime a mező, amit egy nézetben időre konvertáltam, azzal akartam tovább dolgozni.
CONVERT(time(0), ido) AS ido így szépen csak az idő maga látszik.

Amit írtál select, se a konvertált mezőre se az eredetire nem fut le.
A datediff önmagában megy, akkor megvan másodpercben, oké.
De amit ráírom az AVG-t azonnal reklamál.
"Arithmetic overflow error converting expression to data type int."

Antonio Coimbra de la Coronilla y Azevedo, bizony!

(#4226) velizare válasza Petya25 (#4225) üzenetére


velizare
nagyúr

túlfolyik az integeren. sajnos a datediff_big() csak a 2016os sql servertől érhető el. túl sok adatod van, ha tudod, egy where klauzával le kell csökkenteni a számukat.

ellenőrzésképpen ennek a selectnek is ugyanezt a hibát kellene dobnia.

SELECT avg(DATEDIFF(MILLISECOND, '12/01/2015','12/30/2015'));

[ Szerkesztve ]

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4227) martonx válasza Ispy (#4223) üzenetére


martonx
veterán

Jó, mondjuk emlékszünk kezdosqlre, aki nem kicsit kaotikus, de legalább elvben, papíron nagyon faszán tud adatbázist felépíteni. :D

Én kérek elnézést!

(#4228) Ispy válasza martonx (#4227) üzenetére


Ispy
veterán

Nem egyszerű eset, az biztos. :DDD

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#4229) kezdosql válasza Ispy (#4215) üzenetére


kezdosql
tag

Szerintem nem egeszen igy van.;)

Teny, hogy az Ashton Tate jo kezdemenyezeset a tipikus amerikai-angol szemlelet miatt darabokra szedtek, igy mar legalabb feltucatnyi modszert kell ismerni, mert mindenaron rengeteg uj allast akartak letrehozni.

A dBase-ben minden benne volt, a Clipper erre ratett egy lapattal, a vegeredmenybol exe-t csinalva laikusok altal kezelheto megodasokat produkalva. Volt egy megoldas, ami az adott feladatra tokeletesen mukodott, amig nem kellett a semat modositani.

Az altalad irt megoldas vezetett a mai remalomhoz, kell sql, php, html, css, javascript es egyebekhez erto szaki, es termeszetesen kell allando internet kapcsolat, es persze allandoan frissiteni kell mindent, stb.

Emiatt van rengeteg helyen az excel hasznalva, mert az egyszeru user tablazatokban es gorgetheto listakban akarja latni az adatokat.

Marton sqlite javaslataval ramutatott, hogy van megoldas server nelkuli adatbazis kezelesre, amit a c meg pascal es egyeb programok is hasznalnak, es valamikor volt "szoveges adatbaziskezelo" neven ilyesmire felbuzdulas es talan a nosql vagy hasonlok ismet ebbe az iranyba mennek majd.

A kerdes, mikor lesz hozzajuk fordito program, amivel ismet jo penzkereseti lehetoseg lesz programozoknak, mert ismet celszoftvereket lehet irni, amit "buta userek" is tudnak hasznalni es a cegek is boldogok, nem kell felleslegesen internet elofizetesre kolteni es az irodai gepeiket biztonsagos off-line modon tudjak hasznalni.

(#4230) kezdosql válasza martonx (#4220) üzenetére


kezdosql
tag

Ja, hogy c-bol, na igen, illett volna ugy irni, de ahhoz kel mindenfele ms-es egyeb csicsa, igy erosen hw es sw kornyezet fuggo.;)

(#4231) velizare válasza Petya25 (#4225) üzenetére


velizare
nagyúr

kicsit utánaolvastam.
próbáld ki ezt:

select dateadd(s, avg(cast(datediff(s,0,ido) as bigint)), 0) from tabla;

[ Szerkesztve ]

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4232) kezdosql válasza Ispy (#4223) üzenetére


kezdosql
tag

Keress ra weben, hanyezerfele naptar es hasonlo alkalmazas van magukat "uzleti hataidonaplo" es hasonlonak hirdetve, mikozben tenylegesen van egy naptar nezet, lehet szoveget beirni es hasonlokat tenni, de pont a lenyeg, az adatok osszekapcsolasa reven a komplex lekerdezes hianyzik beloluk.

Vagy most jut eszembe, valamikor az outlook az ms-ben is azert lett nepszeru, mert az "uzleti hataridonaplo" illuzioval hirdettek, de tenylegesen nem volt igazi kapcsolat a naptar es a tobbi adat kozott. Arra volt jo, hogy meg lehetett tervezni a talalkozokat, de utolag, amikor arra voltal kivancsi, hogy adott szemellyel mikor talalkoztal, a naptart kellett vegiglapozni, hogy megtalald a bejegyzest.

Ilyen megoldasra talan a sqlite reven lehetoseg lenne, de allitolag pont az vele a gond, hogy a datum kezelese problemas, mert nincs datum tipus, hanem szovegkent vagy szamkent kezeli, de ezt Marton biztosan jobban tudja.

(#4233) bambano válasza velizare (#4231) üzenetére


bambano
titán

nem értek mssql-hez, csak kérdezem:
nem lehet valami közeli dátumhoz képest képezni a bigint-té alakítást? mert akkor maga az integer kicsi lenne, így az avg nem csordulna túl.

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

(#4234) kezdosql válasza martonx (#4227) üzenetére


kezdosql
tag

Pont nem igy van, mert hatranyos helyzetukent ms-buzik tanitottak es a hasznalhatatlan access-t vertek belem, mint sql-t, es a mai napig nem tudok megszabadulni attol a hulye es hazug szemlelettol.:-(((

Amugy pont most irtam, megirnad, sqlite-ban a datum kezeles miert problemas es hogyan lehet megoldani, milyen konverziok es trukkok kellenek hozza?

(#4235) kezdosql válasza Ispy (#4228) üzenetére


kezdosql
tag

"A zseni nem csinal rendet, mert atlatja a kaoszt". - tartja a mondas.
(Azt persze nem teszik hozza, hogy bar emiatt mindig gyorsan eszreveszi a lenyeges dolgokat, de a tobbi papirt gyakran osszetepi vagy leonti kaveval, igy az adott helyzetben mellekes adatok karosodhatnak...)

(#4236) velizare válasza bambano (#4233) üzenetére


velizare
nagyúr

azt írja, hogy az avg() okoz integer overflow-t. ha a datetimeja current_timestamp alapú lenne (2019.08.08 ...), akkor már a datediff()nél túlfolyna az integer, szóval feltételezem, hogy az 1900.01.01.-re van rátéve az idő, és csak nagyon sok adatsor van.

[ Szerkesztve ]

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4237) martonx válasza kezdosql (#4230) üzenetére


martonx
veterán

Te mekkora erővel írod a hülyeségeid. :C
Egyrészt a C# az nem C :K

C#-ot meg 3 éve már .Net Core-al szokás használni, ami teljesen platform független, linuxon, osx-en, és windowson is fut. A grafikus megjelenítés persze más tészta, csak a konzolos megjelenítés cross-platform, ha szép ablakokat akarsz minden platformon, akkor az is megoldható, de az pár fokkal macerásabb.
A C# fejlesztői csicsák, ahogy te fogalmaztál szintén ingyenesek, és szintén cross-platformok. ;)

Én kérek elnézést!

(#4238) Petya25 válasza velizare (#4231) üzenetére


Petya25
addikt

Ez remekül szuperál, köszönöm.
2019-es dátumok (+idő) hada van benne, de hiába szűrtem rövidebb időszakra az nem segített, ez viszont jól működik.

Antonio Coimbra de la Coronilla y Azevedo, bizony!

(#4239) velizare válasza Petya25 (#4238) üzenetére


velizare
nagyúr

gondolom ez már a time-ra konvertált oszlopon fut végig. csak kiváncsiságból, hány sorod van ebben a táblában?

[ Szerkesztve ]

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4240) Petya25 válasza velizare (#4239) üzenetére


Petya25
addikt

Igen de újra rá kellett eresztenem a time convertet mert 1900.01.01 +átlagidő lett belőle. :)
kb 2,4 millió, de mindig időszakra szűrve próbáltam rá.

Antonio Coimbra de la Coronilla y Azevedo, bizony!

(#4241) velizare válasza Petya25 (#4240) üzenetére


velizare
nagyúr

igen, a dateadd() datetimeot készít, szóval ott mindig meglesz a dátum rész is benne.

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#4242) RedHarlow


RedHarlow
aktív tag

Sziasztok,

Oracle db-ben a DATE oszlopban az alábbi módon vannak tárolva a dátumok:
19-AUG. -09

Lekérdezésnél, hibát kapok:

SELECT * FROM TANULO WHERE DATE '19-AUG. -09';

Hogy kellene a dátumra keresnem?

Előre is köszönöm a segítséget!

[ Szerkesztve ]

(#4243) Jim74 válasza RedHarlow (#4242) üzenetére


Jim74
nagyúr

A date után nem kell valami reláció? Egyenlő pl.?
Oracle-höz nem értek, de T-SQL-ben is hibára futna így.

SELECT * FROM TANULO WHERE DATE = '19-AUG. -09';

[ Szerkesztve ]

(#4244) bpx válasza RedHarlow (#4242) üzenetére


bpx
őstag

Nem, nem olyan módon vannak tárolva. Olyan módon vannak megjelenítve.

A módszer, amit írtál fix formátumot használ (YYYY-MM-DD - [link]):

SELECT * FROM TANULO WHERE DATE_OSZLOP = DATE'2019-08-09';

(#4245) kezdosql válasza martonx (#4237) üzenetére


kezdosql
tag

Perszehogynem, rajtad kivul mindenki eszrevette, hogy lemaradt egy karakter, talan igy lehet a bolhabol elefantot csinalni. :F

A crossplatform is lenyegtelen mellekszal, a verziokkal vannak a gondok.

Hasonlokeppen a grafikus opcio is lenyegtelen, a lenyeg az, hogy sqlite-ban nem tudsz menut csinalni, amibol lehet valasztani. Kell egy masik programnyelv hozza.

Amugy a neked szolo kerdest is elegansan figyelmen kivul hagytad, pedig tenyleg erdekel, :K hogy sqlite-ban miert kell a datumot szovegkent tarolni, es milyen konverziokkal lehet datumok kozott muveleteket vegezni?

(#4246) martonx válasza kezdosql (#4245) üzenetére


martonx
veterán

Szvsz rajtam kívül is mindenki fennakadt ezen, maximum leszarták annyira, hogy ne tegyék szóvá ;]
A nekem címzett kérdésed félre ment, talán ezt a kérdést az sqlite fejlesztőinek kellene feltenned, nem én készítem az sqlite-ot :D

Ha olyan adatbázis kezelőt keresel, amit egy szál file másolásával el tudsz a cél user gépére juttatni, és az magán belül oldjon is meg mindent, akkor arra valóban az annyit ócsárolt MS Access a legalkalmasabb.

Milyen verziókkal vannak a gondok?

Én kérek elnézést!

(#4247) Agony


Agony
aktív tag

Sziasztok!

SQL lekérdezés kapcsán lenne szükségem egy kis útmutatásra és bízom a szaktudásotokban, mert én elvesztettem a fonalat. :)

Adott egy igény lista tábla, amin belül van egy feladatok tábla, tehát valaki indít egy igényt és azon belül akár több feladat is elvégezhető különböző személyek által. A feladatok elvégzésére fordított időt kellene összesíteni feladatonként, viszont a helyzetet bonyolítja, hogy bármikor megszakíthatják a feladatvégzés, amit aztán később folytatnak. Pl. munkaidő végén felfüggesztik, reggel pedig folytatják.

Valami SUM-al kombinált DATEDIFF szerűség kellene, de mivel többször megszakíthatnak és folytathatnak egy igényt, ötletem sincs hogyan...

Például:

Igény: Vevő megrendelés

Ezen belül vannak a feladatok az alábbi formában:

Feladat kezdés
A megrendelt áru összekészítése.
Feladat befejezés

Feladat kezdés
A megrendelt áru csomagolása és átadása kiszállításra.
Feladat befejezés

Feladat kezdés
A megrendelt áru kiszállítása.
Feladat befejezés

Minden feladat kezdés és feladat befejezés tartalmaz egy időbélyegzőt, szóval a kezdés és a befejezés között kellene mondjuk egy különbözet percben, aztán ezt az egészet összegezni az igényre. Tehát az összekészítés mondjuk 5 perc volt, a csomagolás 3 perc, a kiszállítás pedig 40 perc, így az igény 48 perc munkaidő volt. Maguk a feladatok nem számítanak, minden esetben csak a kezdés és befejezés állapot között eltelt idő és ezeknek az összege.

Előre is köszönöm a segítséget! :R

Start with a whisper, end with a scream!

(#4248) Apollo17hu válasza Agony (#4247) üzenetére


Apollo17hu
őstag

Szia! Oracle-ben, ha ket idopontot kivonsz egymasbol, akkor a napok szamat kapod kulonbsegkent tizedes szamkent. Ha minden feladat vegdatumabol kivonod a kezdo datumat, es osszeadod oket, akkor napokban kapod meg a kivant erteket. Ezt mar csak 1.440-nel (24*60) kell felszoroznod.

(#4249) Ispy válasza Agony (#4247) üzenetére


Ispy
veterán

Kábé:

select sum(datediff(M, kezdo_datum, vegzo_datum))
from igeny_tabla
inner join feladatok_tabla on igeny_tabla.ID=feladat_tabla.igeny_tabla_id

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#4250) Agony válasza Ispy (#4249) üzenetére


Agony
aktív tag

Köszi, a gond az volt, hogy a kezdő időpontot az egyik sor tartalmazta a befejező időpontot meg ugye az azt követő.

Végül sikerült megszülni a megoldást. Feljoinoltam a feladat táblát saját magára, csak egy sor eltolással, így már megvolt a kezdő- és záró időpont a datediffhez és a sum is működött.

(select
sum(datediff(second,f.idopont,f2.idopont))
from feladat f join feladat f2 on f.igenykod=f2.igenykod and f.tetelzam+1=f2.tetelszam
where f.igenykod=igenyek.igenykod)

Köszönöm szépen a választ! :R

Start with a whisper, end with a scream!

Útvonal

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