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

(#1701) martonx válasza pittbaba (#1699) üzenetére


martonx
veterán

NVL(exception_type, 0)-al már működnie kellene.

Én kérek elnézést!

(#1702) Apollo17hu válasza pittbaba (#1699) üzenetére


Apollo17hu
őstag

törölhető

[ Szerkesztve ]

(#1703) pittbaba válasza Lortech (#1700) üzenetére


pittbaba
aktív tag

Köszönöm!

Közben azt találtam, hogy IS NULL illetve IS NOT NULL -al kell a feltételt megírni, és akkor működik. Köszönöm!

PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

(#1704) Flashback


Flashback
addikt

Tizedes jegyek számának beállításához van valami függvény vagy parancs?

Bocs nincs hosszú ö, ü és néha az á is ä :)

(#1705) bpx válasza Flashback (#1704) üzenetére


bpx
őstag

(#1706) Flashback válasza bpx (#1705) üzenetére


Flashback
addikt

'Trunc' is not a recognized built-in function name.

Ilyenkor mi a helyzet?

Microsoft SQL Server Management Studio 10.50.4000.0
Microsoft Data Access Components (MDAC) 6.1.7601.17514
Microsoft MSXML 3.0 6.0
Microsoft Internet Explorer 9.0.8112.16421
Microsoft .NET Framework 2.0.50727.5466
Operating System 6.1.7601

Bocs nincs hosszú ö, ü és néha az á is ä :)

(#1707) Flashback válasza Flashback (#1706) üzenetére


Flashback
addikt

Ja igen MS SQL :)

Bocs nincs hosszú ö, ü és néha az á is ä :)

(#1708) bpx válasza Flashback (#1706) üzenetére


bpx
őstag

ilyenkor az a helyzet, hogy ez adatbaziskezelonkent valtozik es nem tudhatjuk mire gondoltal, ezert irtam egy olyat, ami hozzam a legkozelebb all :)

de egyebkent MS SQL-ben is van [link]
ha regebbi verzio, akkor a ROUND-ot is lehet hasznalni [link]
a harmadik parametere ha nem 0, akkor nem kerekit, hanem siman csak levagja

(#1709) Sk8erPeter válasza Flashback (#1704) üzenetére


Sk8erPeter
nagyúr

pl. decimal típusú mezőről beszélsz? A kérdésed nem volt túl specifikus.
A mezőt magát szeretnéd általánosan beállítani ([link]), vagy pedig csak megjelenítésnél levágni ([link])?

Sk8erPeter

(#1710) Kommy


Kommy
veterán

Tudnátok segíteni, hogy mit kéne a lekérdezésbe írni ha azt szeretném megvalósítani, hogy van egy szövegmezőm amibe lehet írni (milyen meglepő), és mondjuk 3+ karakter után kilistázná azokat a sorokat amiben a nevek így kezdődnek.

közbe leesett, hogy nekem a like kell

[ Szerkesztve ]

(#1711) Ispy válasza Kommy (#1710) üzenetére


Ispy
veterán

Tehát a 3-assal kezdődőre vagy kíváncsi?

MS SQL-ben mezonev LIKE '3%'

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

(#1712) Jim-Y


Jim-Y
veterán

Sziasztok, van mondjuk 150 sorom, első oszlop egy timestamp, órás bontásban, szeretnék egy olyan lekérdezést csinálni, amiben 12 óránként groupby-olom a sorokat.

Jelenleg:
GROUP BY DATE(S_DATE); ez 7 sort jelent, a táblában egy heti adat van.
vagy
GROUP BY S_DATE; így pedig ugye órás bontásban az egy hetes adat, tehát 168 sor lesz.

Na én a fentebb említett dolgot szeretném, hogy 12 órás bontásban groupby-olhassak :))

Üdv

(#1713) Peter Kiss válasza Jim-Y (#1712) üzenetére


Peter Kiss
senior tag
LOGOUT blog

Adott dátum time komponense kisebb vagy nagyobb 12 óránál (1 vagy 0), majd azalapján GROUP BY (nyilván kell hozzá a dátum fennmaradó része napra pontosan).

(#1714) nyunyu


nyunyu
félisten

Egy adattarhazas cuccban lattam ilyen furcsa queryket:

update tabla1
set valtozo=tabla2.valtozo2
where tabla1.id=tabla2.id;

update tabla1, tabla2, tabla3
set valtozo=tabla3.valtozo
where tabla1.id=tabla2.id and tabla2.valami=tabla3.valami;

Ez mennyire bevett szintaxis?
SQL 2008R2-nek termeszetesen egyik implicit join sem tetszik. ;]

Hello IT! Have you tried turning it off and on again?

(#1715) Ispy válasza nyunyu (#1714) üzenetére


Ispy
veterán

Nem tudom mennyire bevett szokás, és sohasem használtam a where-t join helyett. Pedig láttam már más helyeken is, hogy a where írják, de én sem tudom, hogy miért.

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

(#1716) Apollo17hu válasza Ispy (#1715) üzenetére


Apollo17hu
őstag

Munkahelyemen mi is így írjuk a kötéseket. Ha jól tudom, azért van így, mert annak, aki nulláról kezdi az SQL-t, egyszerűbb a (+) operátor használatát megérteni (=könnyebben beletanul), mint a többféle JOIN-t, és könnyebb is olvasni a többszáz-/többezersoros kódokat. Nekem ráállt erre az agyam, és nagyságrenddel rövidebb idő alatt értelmezek egy ilyen kódot, mint ami JOIN-okkal van tele.

(#1717) nyunyu válasza Ispy (#1715) üzenetére


nyunyu
félisten

Egyetemen azt tanitottak, hogy ma mar ekvivalens ez a ket query:
select *
from tabla t1
join tabla2 t2 on t1.id=t2.id
where t2.nev='valami';

select *
from tabla1 t1, tabla2 t2
where t2.nev='valami' and t1.id=t2.id;

Mind az Oracle, mind az MS SQL automatikusan atalakitja az elso szintaxist a masodik formara, es ugy optimalizalja.
Regen maskepp fordult le a ketto, jobban tudtak optimalizalni, ha vesszovel soroltad fel a tablakat.

Na, de updatetelendo tablahoz joinolni??? Az nekem uj.

[ Szerkesztve ]

Hello IT! Have you tried turning it off and on again?

(#1718) Ablakos válasza nyunyu (#1717) üzenetére


Ablakos
őstag

Hát hogyan mondod meg a sql motornak, hogy mellik rekordokon szeretnél update-t? Ha nem szűröd, nem kapcsolod semmihez, akkor minden rekordon végigmegy. Vagy nem így van?

(#1719) nyunyu válasza Ablakos (#1718) üzenetére


nyunyu
félisten

Eredeti querykben volt feltetel is, nem csak a join kotesei, de nem az a lenyeg.

Hello IT! Have you tried turning it off and on again?

(#1720) Apollo17hu válasza nyunyu (#1717) üzenetére


Apollo17hu
őstag

Ilyet én is szoktam csinálni. Az a feladat, hogy megadott feltételek szerint válogassam ki a szükséges néhánytízezer rekordot egy segédtáblába, amivel később a hónap folyamán dolgozunk. A rekordokat könnyű kiválasztani, de kb. 100 attribútum tartozik hozzájuk, azokat pedig 20-25 adattáblából kell összeszedni. Ha ezeket mind egyetlen lekérdezésbe írnám, az életben nem futna le. (Optimalizáláshoz nem értek, az IT-segítség pedig sok lóvéba kerül. :) ) Ezért a leválogatott rekordokhoz később, UPDATE-ekkel keresem ki az attribútumokat - akár egyesével az eddig fel nem használt adattáblákból.

(#1721) Ispy válasza nyunyu (#1717) üzenetére


Ispy
veterán

Pedig teljesen standard dolog, én is sokat használom tárolt eljárásokban, például összetett lekérdezéseknek inkább csinálok egy temp táblát és ott rakom össze az adatokat.

Igaz nem a wheres megoldással, nekem arra nem áll rá az agyam, de gondolom megszokás kérdése.

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

(#1722) bambano


bambano
titán

a kérdés konkrétan postgresql és jáva, de szerintem általánosítható.
text mezőben akarok sql kereséseket tárolni. hogy kell escape-lni, van-e rá valami szabvány eljárás vagy kész függvény?

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

(#1723) Peter Kiss válasza bambano (#1722) üzenetére


Peter Kiss
senior tag
LOGOUT blog

Lehet, hogy rátolnék egy base64-et.

(#1724) bambano válasza Peter Kiss (#1723) üzenetére


bambano
titán

nekem is ez volt a kezdő ötlet, de itt szokott lenni jobb is...

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

(#1725) Jester01 válasza bambano (#1722) üzenetére


Jester01
veterán

Ugyanúgy kell mint bármi mást, adatbázis oldalon pedig mindegy mi van a text mezőben.
Remélem valami paraméteres sql parancsot használsz, akkor pedig az escape problémát az transzparensen megoldja neked.

Jester

(#1726) bambano válasza Jester01 (#1725) üzenetére


bambano
titán

[link] :)

nem használhatok paraméteres sql-t, mert semmilyen előzetes infóm nincs arról, hogy milyen selectet akarnak később... azt akarom megoldani, hogy egyszer megfaragom a programot jávában, utána pedig bármilyen hasfájásuk van, csak betolok egy rekordot egy táblába és le tudják tölteni a keresés eredményét.

ezt, hogy előre semmit nem tudok a lekérdezésről, nemigen lehet paraméterezni...

a bármi más escapelését eddig kerülőúton oldottam meg...

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

(#1727) Jester01 válasza bambano (#1726) üzenetére


Jester01
veterán

Mármint annak az sql parancsnak kell paraméteresnek lennie ami a te sql parancsod teszi be a táblába.
INSERT INTO queries (query) VALUES (?) és a query értéket pedig paraméterként megadni.

Jester

(#1728) bambano válasza Jester01 (#1727) üzenetére


bambano
titán

felfogtam :) de ezt nem akartam jávában megírni, kézzel megoldom.

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

(#1729) Jester01 válasza bambano (#1728) üzenetére


Jester01
veterán

Akkor viszont én nem fogtam fel mit akarsz. :B

Jester

(#1730) bambano válasza Jester01 (#1729) üzenetére


bambano
titán

adminisztrációs rendszer. jávában, webes felülettel. időnként beesik a főnök agyába, hogy erről meg arról listát akar. én meg nem akarok folyton gép előtt dekkolni, hogy megcsináljam neki a listát.
ezért azt találtam ki, hogy írok egy programrészt, ami egy tetszőleges select eredményét xls-be konvertálva letölthetővé teszi a webes felületről. egy tábla, abban egy rekord egy lekérdezés, egyik mező név, másik mező egy text, amiben a select van. ha a főnöknek kiújul a könyökfájása, akkor összematekolom az sql kifejezést és beletöltöm az adatbázis táblájába távolról.

na innen indul a kérdés, hogy milyen formátumban töltsem bele. utána ő a webes felületén kiválasztja egy dropdown menüből, hogy melyik listát akarja, klikkel és letöltődik a lista.

egy átlagos selectben nyilván lesz aposztróf, stb. amit csak úgy nem lehet inzertálni a táblába, meg szelektálni belőle. ehhez kellene a net nagy iq-ja, hogy hogyan kódoljam a selectet, amit utána jávában egyszerűen vissza lehet konvertálni sql stringgé, amit utána le tudod futtatni.

de nekem nem kell webes felület, hogy beletöltsem az adatbázisba, egyrészt mer minek, másrészt nem baj az, ha ők nem tudnak mindenféle bravúros dolgot könnyen beletölteni, amivel utána kigyalulnak mindent.

a base64, mint eddig elhangzott ötlet, egészen jónak tűnik, csak megvárom, tud-e valaki jobbat (ezt a mondatot erősen értsd magadra :) )

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

(#1731) Jester01 válasza bambano (#1730) üzenetére


Jester01
veterán

De egyáltalán minek bárhogy kódolni? A text mezőben bármi lehet, csak akkor lenne probléma ha beszúrni akarnád programból. Mivel ezt kézzel csinálod, kiolvasni meg triviális akkor mi a gond?

Jester

(#1732) bambano válasza Jester01 (#1731) üzenetére


bambano
titán

egy insert into tabla (sql_command) values ('select * from customer where name like 'kovács%';'); utasítás szerintem nem fog lefutni.
az még nekem is egyértelmű, hogy itt a belső aposztrófokat escapelni kell. és még mit?
de mivel az itteni hozzászólások alapján többen is jobban konyítanak ehhez, mint én, hasznosnak láttam feltenni a kérdést.

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

(#1733) Jester01 válasza bambano (#1732) üzenetére


Jester01
veterán

Persze, de ez a beszúrás amit állítólag kézzel csinálsz akárhogy (azt csak sikerül megoldani). Ennek az eredményeképpen a mezei sql lesz a mezőben amit aztán a kódból már nem kell tovább alakítani.

Jester

(#1734) Ispy válasza bambano (#1732) üzenetére


Ispy
veterán

Miért ne? Csak az SQL utasításban az ' jelet cseréld ki '' jelre (azaz duplára), akkor az SQL ' jelként fogja értelmezni.

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

(#1735) bambano válasza Ispy (#1734) üzenetére


bambano
titán

select * from customer where name like "kovcs%";
ERROR: column "kovcs%" does not exist
LINE 1: select * from customer where name like "kovcs%";

szerk: közben rájöttem, dupla aposztrófra gondolhattál, nem idézőjelre.

[ Szerkesztve ]

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

(#1736) Ispy válasza bambano (#1735) üzenetére


Ispy
veterán

insert into tabla (sql_command) values ('select * from customer where name like 'kovács%';')

Amikor insertálsz a táblába akkor.

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

(#1737) Ispy válasza bambano (#1735) üzenetére


Ispy
veterán

közben rájöttem, dupla aposztrófra gondolhattál, nem idézőjelre.

Igen, mert akkor az SQL motor nem karakterlánc kezdete / vége jelként kezeli, hanem sima aposztrófként a stringen belül.

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

(#1738) Jim-Y


Jim-Y
veterán

Üdv,
egy mysql procedure-ben szeretném azt megvalósítani, hogy ha egy tábla még nincs az adatbázisban, akkor a CREATE TABLE rész fusson le, ha már van tábla, akkor pedig egy másik, jelen esteben INSERT.

Próbáltam magamtól, és kerestem neten is, de mindeddig nem jártam sikerrel, mert..

mert vagy olyat találtam, hogy CREATE TABLE IF NOT EXISTS ..stb, de ez nem jó, mert nekem egy IF szerkezet kéne, de IF-et meg nem lehet csak úgy írni, tehát ez pl nem jó..
IF(EXISTS (T1), INSERT INTO... , CREATE TABLE ... )

Hogy szoktátok ezt csinálni? üdv

(#1739) Peter Kiss válasza Jim-Y (#1738) üzenetére


Peter Kiss
senior tag
LOGOUT blog

SELECT 1
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';

Ha ez hoz vissza valamit, akkor létezik, egyébként nem.

(#1740) Jim-Y válasza Peter Kiss (#1739) üzenetére


Jim-Y
veterán

Oké..és ezt hogy fűzöm bele egy elágazásba?

(#1741) Ispy válasza Jim-Y (#1740) üzenetére


Ispy
veterán

Csinálsz egy lokális változót és annak adod át az értékelt, pl. SELECT @w = 1 FROM ......

És a @w-t rakod be az IF-be.

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

(#1742) Peter Kiss válasza Jim-Y (#1740) üzenetére


Peter Kiss
senior tag
LOGOUT blog

EXISTS-cel? :U

(#1743) Jim-Y válasza Ispy (#1741) üzenetére


Jim-Y
veterán

Sziasztok ismét..sajnos ez nem akar összejönni:S

SELECT 1
FROM information_schema.tables
WHERE table_schema = 'valami'
AND table_name = 'MY_TABLE' INTO @table_exists;

IF(@table_exists = '1',(SELECT * FROM MY_TABLE;) , (CREATE TABLE MY_TABLE;) );

Erre ez a hibaüzenet jön:
There are more than one commands on this line. Note that only the first complete command is executed.

Értem a hibaüzit, értem azt is, hogy nem így kéne, de nincs ötletem, hogy hogy lehetne megoldani, itt nincsenek függvények, nem tudok az IF-en belül függvényt hívni, nem tudom hogy kéne a @table_exists változótól függően, ezt, vagy azt a query-t lefuttatni :(

[ Szerkesztve ]

(#1744) Ispy válasza Jim-Y (#1743) üzenetére


Ispy
veterán

Sajnos én nem értek mysql-hez, csak mssql-hez, ott így van:

SELECT @table_exists=1
FROM information_schema.tables
WHERE table_schema = 'valami'
AND table_name = 'MY_TABLE'

IF @table_exists = 1
BEGIN
SELECT * FROM MY_TABLE
END
ELSE
BEGIN
CREATE TABLE MY_TABLE
END

Ha nem megy, akkor menjél át a prog.hu-ra, ott biztosan segítenek.

[ Szerkesztve ]

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

(#1745) bpx válasza Jim-Y (#1743) üzenetére


bpx
őstag

és miért az IF() függvényt használod?
a függvény kifejezéseket vár, nem utasításokat vagy lekérdezéseket

van rendes IF is

[link]

(#1746) Peter Kiss válasza Jim-Y (#1743) üzenetére


Peter Kiss
senior tag
LOGOUT blog

IF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = '[database name]' AND table_name = '[table name]')
THEN

ELSE

END IF

(#1747) bambano válasza Ispy (#1737) üzenetére


bambano
titán

szóval postgresql esetén a $$-os idézés tűnik a legegyszerűbbnek:

insert into tabla (sql_command) values ($$select * from customer where name like 'kovács%';$$);

kösz a tanácsokat mindenkinek.

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

(#1748) plaschil


plaschil
aktív tag

Üdv!

Oracle XE-ben létrehoztam egy táblát, ehhez írtam grafikus felületet, amivel törlök, módosítok, felviszek, keresek adatokat...
A törlés valamiért nem megy helyesen, ugyanis mindig sikeresként könyveli el a törlést, akkor is ha olyan elemre hivatkozom törléskor, ami nem is létezik. Ha sql parancsokkal próbálom az sql command felületen törölni azt ami nem létezik, ezt kapom vissza:
0 row(s) deleted.
Itt nem valami hibának kellene történnie? (Kb. olyannak, mint amikor olyat akarok felvinni az adatbázisba, ami már létezik...) Mert hiába várom én a kivételt, ha sosem dobódik meg... :U
Vagy valamit rosszul csinálnék?

btnTorles.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
torolni = textTorles.getText();
SQLP = "{CALL tanulok_DELETE(?)}";
try {
cs = conn.prepareCall(SQLP);
cs.setString(1, torolni);
cs.executeQuery();
JOptionPane.showMessageDialog(null, "Sikeres törlés!\nTörölve: " + torolni, "Üzenet", 1);
} catch (Exception torleshiba) {
JOptionPane.showMessageDialog(null, "Sikertelen törlés! \n" + torleshiba.getMessage(), "Üzenet", 0);
}
}
} );

Creative G500 vezérlő panelt keresek// Hol vagy helyileg? - A kisszobába. // Szilvásbuktát, mert azt szeretem!

(#1749) bpx válasza plaschil (#1748) üzenetére


bpx
őstag

miért kellene hibának történnie?
ha egy sor sem felel meg a feltételeknek, az nem hiba törlésnél, de lekérdezésnél sem

(#1750) Ablakos válasza plaschil (#1748) üzenetére


Ablakos
őstag

Ugyan miért lenne kivétel egy sikeres törlés. Éppen 0 db rekord lett eltávolítva. Ennyit választott ki a szűrésed.
%ROWCOUNT megmondja mennyi volt a dml eredménye.

Útvonal

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