SQL select, datetime érték egyeztetés stringgel.

SQL select, datetime érték egyeztetés stringgel.
2019-11-24T10:29:51+01:00
2019-11-24T15:03:24+01:00
2022-10-15T21:26:32+02:00
WinDev
SELECT `id`, `yid`, `referenciaszam`, `egyediazon`, `szamla_azon`, `ado`, `varhato_datum`, `tenyleges_datum`, `kiszall_datum`, `rend`, `kolts`,  `fuv`, `vam` FROM `main` WHERE ado="13221EU2" OR rend="13221EU2" OR kolts="13221EU2" OR vam="13221EU2" OR fuv="13221EU2" AND tenyleges_datum > "2000-01-01" AND kiszall_datum = "2000-01-01" ORDER BY tenyleges_datum DESC,rend


Sziasztok!
MYSQL-t használok, datetime alapértelmezett értéknek a 2000-01-01 00:00:00 van beállítva a varhato, tenyleges, kiszall_datumra.

A problémám az hogy csak akkor akarom megjeleníteni a sort ha a tenyleges datum nagyobb mint a 2000-01-01 ÉS a kiszall_datum egyenlo a 200-01-01 el, tehát ameddig a kiszall_datum nincs módosítva addig látnom kéne az adott sort. 

Próbáltam már 2000/01/01 -el, hátha a tagolás a probléma, próbáltam date(tenyleges_datum) al konvertálni a datetime-ot date-re és utána megnézni hogy az értéke nagyobb e mint a 2000-01-01.

De egyelőre nem jövök rá mit rontok el.
Mutasd a teljes hozzászólást!
Szerintem akkor alapvetően zárójelezési problémáról van szó (lásd: előző hozzászólásom vége).
Próbáld ki, hogy date típusra konvertálsz, és zárójelezel, majd írd meg az eredményt!

Más:

Tehát csak akkor kellene értéket vissza adnia ha a tenyleges_datum nagyobb mint "2000-01-01" ÉS a kiszall_datum="2000-01-01". Tehát még nincs kiszall_datuma, de van tenyleges_datuma.

A 2000-es (kiszall) dátumok azt jelentik nálad, hogy nincs értékük?
Ha igen, akkor a következő kérdésem: a NULL-ról hallottál már?
Mutasd a teljes hozzászólást!

  • 1.) Ha date kell és nem datetime, akkor a típus legyen date, így nem kell bűvészkedni
    2.) Mutathatnál minta rekordokat, amiknek benne kellene lennie az eredményben, de nincsenek benne
    Mutasd a teljes hozzászólást!
  • Akkor tároljam külön oszlopban a date és time -ot? 
    Mivel mindkettőre szükségem van a megjelenítésnél, de a háttérben csak dolgozom vele a szűrésnél.

    Igazából kilistázza az összes sort, ami normális lenne, viszont csak azt a sort kéne mutatnia ahol a tenyleges_datum nagyobb mint 2000-01-01 és a kiszall_datum egyenlő 2000-01-01, mert egy másik fülön azt fogom megjeleníteni ahol a kiszall_datum nagyobb mint 2000-01-01.
    Mutasd a teljes hozzászólást!
  • Akkor tároljam külön oszlopban a date és time -ot? Mivel mindkettőre szükségem van a megjelenítésnél, de a háttérben csak dolgozom vele a szűrésnél.

    Ez esetben maradjon datetime, ne szedd szét, viszont akkor tényleg bűvészkedni kell (datetime->date konverzió, vagy a szűrési dátum kiegészítése óra:perc:másodperc adatokkal).

    Igazából kilistázza az összes sort, ami normális lenne, viszont csak azt a sort kéne mutatnia ahol...

    Mutass néhány minta sort az adatbázisból (másodszor kérem), és írd meg, hogy ezek közül mit szeretnél látni a select eredményében, mert megfogalmazni nem igazán sikerült eddig.

    A mintában legyen olyan is, amit látni akarsz, és olyan is, amit nem!

    Ha a feltételeid egyenként helyesek, akkor simán lehet, hogy csak zárójelezési problémád van... ahogy látom van sok OR is a WHERE-ben.
    Pl:

    ...WHERE (a dátumaid feltételei AND-del) AND (a többi feltételed OR-ral)
    De ehhez tényleg tudni kellene, hogy mit is akarsz szelektálni pontosan...
    Mutasd a teljes hozzászólást!
  • Szia!

    A dátum formátum : {d'2000-01-01'}
    A timestamp formátum : {ts'2000-01-01 00:00:00'}

    B.T.
    Mutasd a teljes hozzászólást!
  • SELECT `id`, `yid`, `referenciaszam`, `egyediazon`, `szamla_azon`, `ado`, `varhato_datum`, `tenyleges_datum`, `kiszall_datum`, `rend`, `kolts`, `fuv`, `vam` FROM `main` WHERE ado="13221EU2" OR rend="13221EU2" OR kolts="13221EU2" OR vam="13221EU2" OR fuv="13221EU2" AND tenyleges_datum > "2000-01-01" AND kiszall_datum = "2000-01-01" ORDER BY tenyleges_datum DESC,rend
    Ezt a sort azért nem akarom látni mivel a 2019-11-24 dátum a kiszall_datum -nál nem egyenlő 2000-01-01 el.


    26
    765432
    987654
    DSSA12334567
    99999
    1
    13221EU2
    2000-01-01 00:00:00
    2019-11-21 00:00:00
    2019-11-24 00:00:00
    13221EU2
    13221EU2
    13221EU2
    13221EU2

    Így azért nem akarom látni mert 
    A tényleges_datum nem nagyobb mint 2000-01-01 (Hiszen ha 2019-11-20 van oda írva, az nagyobb mint a 2000-01-01)
    26
    765432
    987654
    DSSA12334567
    99999
    1
    13221EU2
    2000-01-01 00:00:00
    2000-01-01 00:00:00
    2000-01-01 00:00:00
    13221EU2
    13221EU2
    13221EU2
    13221EU2

    Így pedig látnom kéne mert tenyleges_datum 2019-11-21 tehát nagyobb mint 2000-01-01, de a kiszall_datum egyenlő 2000-01-01.
    26
    765432
    987654
    DSSA12334567
    99999
    1
    13221EU2
    2000-01-01 00:00:00
    2019-11-21 00:00:00
    2000-01-01 00:00:00
    13221EU2
    13221EU2
    13221EU2
    13221EU2



    Ha kell kiexportálom az eredményt, de a sorok egyedül a dátumokban különböznek.

    Tehát csak akkor kellene értéket vissza adnia ha a tenyleges_datum nagyobb mint "2000-01-01" ÉS a kiszall_datum="2000-01-01". Tehát még nincs kiszall_datuma, de van tenyleges_datuma.
    Mutasd a teljes hozzászólást!
  • Szerintem akkor alapvetően zárójelezési problémáról van szó (lásd: előző hozzászólásom vége).
    Próbáld ki, hogy date típusra konvertálsz, és zárójelezel, majd írd meg az eredményt!

    Más:

    Tehát csak akkor kellene értéket vissza adnia ha a tenyleges_datum nagyobb mint "2000-01-01" ÉS a kiszall_datum="2000-01-01". Tehát még nincs kiszall_datuma, de van tenyleges_datuma.

    A 2000-es (kiszall) dátumok azt jelentik nálad, hogy nincs értékük?
    Ha igen, akkor a következő kérdésem: a NULL-ról hallottál már?
    Mutasd a teljes hozzászólást!
  • Átállítottam NULL-ra, így ennyiben módosult az SQL:
    WHERE kiszall_datum IS NULL  AND tenyleges_datum IS NOT NULL

    Viszont még így is hozta az összes sort.
    Kitöröltem az OR-okat és úgy viszont már jó.

    Viszont nekem szükségem van arra hogy ha a ado="'.$_SESSION['username'].'" OR rend="'.$_SESSION['username'].'"OR kolts="'.$_SESSION['username'].'" OR vam="'.$_SESSION['username'].'" OR fuv="'.$_SESSION['username'].'"

    Ez print_r el így néz ki ugye:
    ado="13221EU2" OR rend="13221EU2" OR kolts="13221EU2" OR vam="13221EU2" OR fuv="13221EU2

    Tehát ha a session username (jelenesetben 13221EU2 szerepel bármelyik oszlopban bármelyik sornál, akkor listázza az adatokat.

    Viszont ha benne hagyom az SQL lekérdezésben így az or feltételeket, akkor hiába szűröm, mivel ezek a feltételek igazak lesznek a többi ellenére is. Zárójelbe kéne raknom az OR feltételt?
    Mutasd a teljes hozzászólást!
  • Az egész OR feltételet beraktam egy zárójelbe és így már működik, de minden esetre okosítottam a kódon az IS NULL és az IS NOT NULL feltétellel.
    Mutasd a teljes hozzászólást!
  • Az egész OR feltételet beraktam egy zárójelbe és így már működik

    Nagyszerű, remélem érted is, hogy miért működik jól így és miért nem működött jól enélkül.

    de minden esetre okosítottam a kódon az IS NULL és az IS NOT NULL feltétellel.

    Az alap problémádhoz nem volt köze, de mindenképpen jó, hogy ezt is megcsináltad.
    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