BETWEEN és LIKE együttes használata

BETWEEN és LIKE együttes használata
2015-02-05T16:13:10+01:00
2015-02-06T11:54:18+01:00
2022-12-02T03:41:55+01:00
BIG W
Üdv!

Az lenne a kérdésem, hogy van-e valami mód arra, hogy a BETWEEN-t, és a LIKE-ot együtt tudjam használni a lekérdezésben?

Pl.:

SELECT Oszlop FROM Tábla WHERE Oszlop BETWEEN LIKE 'alma01%' AND 'alma09%'
Csak ez ugye hibás, de egy hasonló megoldásnak nagyon örülnék!

Előre is köszönöm!
Mutasd a teljes hozzászólást!
Ha a mező szöveges részére a szám részétől függetlenül szeretnél lekérdezni, akkor miért kerültek egy mezőbe? Ha külön-külön mezőben lennének, akkor a sztring oszlopra mehetne LIKE vagy akár sima egyenlőség vizsgálat, a számra meg mehetne BETWEEN. Plusz megfelelő indexek mellett még hatékony is bírna lenni a lekérdezés.
Mutasd a teljes hozzászólást!

  • Ha itt a between arra irányulna, hogy alma01, alma02, ... alma09-cel kezdődő sztringekre illeszkedjen a lekérdezés, akkor where mező like 'alma0[1-9]%'


    Lásd itt

    De jó lett volna, ha nem találgatnunk kéne, hanem leírtad volna egyértelműen, mit is szerettél volna elérni a lekérdezésedben. Tényleg ilyen nehéz normálisan kérdezni?
    Mutasd a teljes hozzászólást!
  • Köszi a választ!

    Nem teljesen jó, mert erre van két szöveges keresőmezőm (-tól, -ig) kliens oldalon, és ott ugye betűkkel kezdem a beírást, aztán jön a számsor.
    Mutasd a teljes hozzászólást!
  • Akkor elmondom érthetően:
    Van egy tábla tele azonosítókkal, először kezdődik egy 5 karakteres betűvel, aztán egy 8 karakteres számsorral. Pl:

    almav00000132
    almav00000133
    almav00000134
    almav00000135
    almav00000136

    Kliens oldalon van két szövegmezőm, ami -tól -ig funkcióval működne. Hogy tudom azt elérni, hogy a szűrés a szövegmezőn csak a -tól -ig mezők értékei között listázza ki az eredményt?
    Mutasd a teljes hozzászólást!
  • Ha a mező szöveges részére a szám részétől függetlenül szeretnél lekérdezni, akkor miért kerültek egy mezőbe? Ha külön-külön mezőben lennének, akkor a sztring oszlopra mehetne LIKE vagy akár sima egyenlőség vizsgálat, a számra meg mehetne BETWEEN. Plusz megfelelő indexek mellett még hatékony is bírna lenni a lekérdezés.
    Mutasd a teljes hozzászólást!
  • Akkor daraboljam szét a sztringet 2 részre, és úgy kérjem le?
    Mutasd a teljes hozzászólást!
  • Van még vmilyen egyéb feltétel / körülmény amiről tudnunk kéne?

    Próbáld meg a

    WHERE Oszlop BETWEEN 'alma01%' AND 'alma09%'
    formában futtatni a lekérdezést (like nélkül)
    Mutasd a teljes hozzászólást!
  • Már próbáltam. Az nem működött.
    Mutasd a teljes hozzászólást!
  • Hát az első normálforma onnan kezdődik, hogy minden oszlopban csak egy értéket tárolunk, nem több értéket összefűzve vagy egyéb módon kombinálva. Szerintem érdemesebb lenne a sémát megváltoztatni úgy, hogy két külön oszlopban legyen az adat. Ha a számban számítanak a vezető nullák, akkor azt az oszlopot is karakteresként érdemes felvenni, egyébként legyen szám típusú.
    Mutasd a teljes hozzászólást!
  • Köszi! :) Alkalmazom a tanácsod!:)

    Üdv.
    Mutasd a teljes hozzászólást!
  • Esetleg ez?

    SELECT Oszlop FROM Tábla WHERE Oszlop BETWEEN 'alma01' AND 'alma09'


    Ez megtalálja pl.: az alma0111 és alma0888-is.
    Mutasd a teljes hozzászólást!
  • Erre az adaszerkezetre még a

    WHERE Oszlop BETWEEN 'almav00000001' AND 'alma00000009'
    lekérdezésnek is futnia kell. A lényeg az, hogy a szélső értékeket kell megadni a lefedni kívánt tartományból és máris nincs szükség like-ra és mintára.

    De Csaboka2 javaslata sem rossz: bontsad meg a mezőt kétfelé.
    Mutasd a teljes hozzászólást!
  • SELECT Oszlop FROM Tábla WHERE (substring(Oszlop,1,5) Like 'alma%') and (CONVERT(INT, substring(Oszlop,6,8)) BETWEEN 5 AND 10)
    Mutasd a teljes hozzászólást!
  • Szerintem inkább futtasd le a lekérdezésed!:D Eleve nem jó.
    Mutasd a teljes hozzászólást!
  • Pontosíthatnád, hogy nálad mit jelent az "Eleve nem jó".
    Mutasd a teljes hozzászólást!
  • Te meg az enyémet. Minden óhajodnak megfelel és nem mellébeszélés mint amit elfogadtál válaszként.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Mellébeszélés a kutya fülét. Próbáltam a háttérben levő igazi problémára tanácsot adni (nem normál formában vannak az adatok) tüneti kezelés helyett. A megoldási javaslatodat pedig nagy tábla esetén hatékonyra kihozni elég munkás lesz, mert ugye substring meg convert függvény nem nagyon fog tudni indexeket használni (vagy max. csak az ő kedvükért létrehozott funkcionális indexet tudnak majd használni, ha tud olyat az SQL Server)...
    Mutasd a teljes hozzászólást!
  • A feltett kérdés nem az volt hogy hogyan lehetne az adott problémát elkerülni egy jobb adatbázis szerkezettel , hanem a jelenleginél a Like és Between együttes használata. Ennek a problémának elkerülése/optimalizálása  a következő kérdése lett volna , de mint tudjuk egy téma egy kérdés így nem erre a kérdésére válaszoltál. Ha leírod azt amit én és kiegészíted a jövőbeni optimálisabb adatszerkezetre utalással , az még elment volna, de így szó szerint mellébeszélés.
    Mutasd a teljes hozzászólást!
  • Az adatlapod alapján már majdnem hét éve tag vagy, és tényleg nem láttál még olyat, hogy a kérdező a rossz kérdést teszi fel? Általában azért jönnek ide az emberek, hogy a problémájuk megoldódjon, és ez néha azzal jár együtt, hogy közben rávezetjük őket, hogy az eredeti megközelítésük nem volt jó, és így a kérdésük is értelmetlen vagy felesleges.

    Vagy ha úgy tetszik, én BIG W problémájára adtam megoldást, nem pedig a kérdésére választ.
    Mutasd a teljes hozzászólást!
  • Ha külön-külön mezőben lennének, akkor a sztring oszlopra mehetne LIKE vagy akár sima egyenlőség vizsgálat, a számra meg mehetne BETWEEN.

    Ezzel a mondatoddal félrevezetted, elhitetted vele hogy a jelenlegi formájában értelmetlen és megoldhatatlan a kérése, ezért is fogadta el a javaslatodat megoldásnak utána.
    Mutasd a teljes hozzászólást!
  • És ennek az lett a vége, hogy a kérdező talán egy normálisabb struktúrájúvá szervezte át az adatbázisát. Valóban hatalmas tragédia!
    Mutasd a teljes hozzászólást!
  • Nem arról van szó hogy jobb lett vagy sem a kérdező rendszere , hanem a problémamegoldási készségről. Vannak akiknek szenvedélyük a problémamegoldás és minél agyamentebb a probléma annál nagyobb élvezet okoz nekik ha sikerül egy működő megoldást találniuk rá, míg vannak azok a programozók akik csak a pénz miatt váltak azzá és lusták arra hogy beleássák magukat egy problémába így inkább egy konvencionális megoldást javasolnak , csak gondolkodni ne kelljen.
    Amint írtam írjon rá egy megoldást majd javasoljon utána egy jobb rendszert helyette csak akkor kerek a dolog. Ez így olyan mintha az autószerelőd azt mondaná hogy az autódat nem lehet javítani de közben rád sózna egy hasonlót kis ráfizetéssel ahol persze a ráfizetés sokszorosa annak mint amibe a  javítás került volna.
    Mutasd a teljes hozzászólást!
  • Vannak akiknek szenvedélyük a problémamegoldás és minél agyamentebb a probléma annál nagyobb élvezet okoz nekik ha sikerül egy működő megoldást találniuk rá, míg vannak azok a programozók akik csak a pénz miatt váltak azzá és lusták arra hogy beleássák magukat egy problémába így inkább egy konvencionális megoldást javasolnak , csak gondolkodni ne kelljen.


    Néha nekem is előjön az a perverzióm, hogy a feladatokat úgy oldjam meg, ahogy még előttem senki más, vagy olyan eszközzel, amit nem arra a feladatra szántak. Csak igyekszem a production rendszerektől távol tartani az ilyesmit, kivéve, ha tényleg csak nyakatekerten, berhelve lehet valamit megoldani.

    A szenvedélyről meg annyit, hogy én már azelőtt olvastam programozásról könyvet, általános iskolás koromban, hogy egyáltalán géphez fértem volna és a gyakorlatban le tudtam volna futtatni bármit. Egy open source játék patchbe évekkel azelőtt belesegítettem, hogy bárki pénzt adott volna nekem programozásért cserébe. Szóval te csak így távolról ne akard megítélni a személyiségemet meg a motivációmat.

    Részemről a téma lezárva, mert értelme nincsen. Ha szerinted igazságtalan volt az elfogadás, akkor Ivn-t keresd, mint a téma moderátorát. Átrakni más úgyse tudja a pontot, csak ő, mert a kérdező már elfogadott egy megoldást.
    Mutasd a teljes hozzászólást!
  • Nos akkor elmondom még egyszer. A kérdésben nem egy konkrét adatbázis táblájának a mezője szerepelt eredetileg, hanem általánosan szólt olyan mezőkről amelyek egyidejűleg tartalmazhatnak karaktereket és számokat . Ilyenek lehetnek például a rendszámokat, igazolványszámokat ,  
    izotópokat és még ezernyi olyan dolgot tartalmazó táblák ahol logikai hiba lenne szétvágni a karaktereket és a számokat két mezőre mivel azok együttesen azonosítanak valamit. Az hogy a saját esetében alkalmazhatta a mezők szétvágását csak véletlen.
    Mutasd a teljes hozzászólást!
  • Igen, a kérdést rosszul tette fel a kérdező. A pontos kérdės ismeretében Csaboka2 megoldási javaslata nem rossz, bár szvsz ez like és a mező megosztása nélkül is megoldható. Az eredeti kérdésre pedig én már régen megadtam a választ, ami még indexet is tud használni. Szal, nyugi.
    Mutasd a teljes hozzászólást!
  • Én nyugodt vagyok, csak imádok vitatkozni 
    Mutasd a teljes hozzászólást!
  • Pontosítom: Nem talál eredményeket.
    Mutasd a teljes hozzászólást!
  • Az "Eleve nem jó", "Nem talál eredményeket" válaszok nem viszik előrébb a témát.
    Szívesen segítek, ha érdekel ez a fajta megoldás, de ahhoz az kell, hogy Te is partner legyél.
    Első lépésként leírhatod, hogy hogyan próbálkoztál.
    (Rögtön utánam Árnyék is javasolta ezt a megoldás formát, így gyanítom, hogy nem a javaslattal van a gond).
    Mutasd a teljes hozzászólást!
  • Sajnos a kérdezővel vannak komoly gondok ebben a témában, nem a különböző megoldási javaslatokkal.
    Mutasd a teljes hozzászólást!
  • Vagy csak szimplán össze van zavarodva, vagy teljesen kimerült a megoldások keresésében. ;)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd