sql kysely jossa päivämäärä sekä aika

Miten tehdään sql kysely (MySQL-tietokantaan), jossa rajoittavia tekijöitä ovat aloitus- ja lopetuspäivämäärä sekä aloitus- ja lopetuskellonajat?

Kyselyn pitäisi palauttaa aikavälin data.
Kellonaika tarkentaa annetun päivämäärien ajanhetkeä.

Perl-koodini, jossa sql query, mutta ei toimi:

$query = "SELECT * FROM $tableName WHERE (date>='$minDate' AND time>='$minTime') AND (date
54242
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

MySQL:ssä voi kyllä vertailla niitä aikoja ihan suoraan kuin vaikkapa numeroita jos aika on talletettu kantaan muodossa yyyymmddhhmmss, eli suurimmasta yksiköstä pienimpään. Voisi olla järkevämpää laittaa päivämäärä ja kellonaika kantaan samaan sarakkeeseen.

Äänestä

Oletko kokeillut kirjoittaa tuota SQL-lausettasi suoraan MySQL -ohjelmaan? Kokemus on minulla ainakin opettanut, että ensin kannattaa kirjoittaa toimi SQL-lause "kovakoodatuilla" eli kiinteillä arvoilla ja sitten kun se toimii niin korvata kiinteät arvot noilla muuttujilla.

Itse tietokannasta sen verran, että suositeltavaa voisi olla yrittää laittaa aika ja päivämäärä samaan sarakkeeseen (niinkuin tuossa aiempi kommentoija jo ehdottikin).

Äänestä
  • Ikävä kyllä en pysty laittamaan samaan sarakkeeseen tietoja, koska tietokantaan on alunperin tehty "date, time" eri sarakkeisiin ja tietokanta on tuollaisenaan käytössä. Joku konsti pitäisi keksiä...

    Pääongelmana SQL lauseessani on, että "time" määritys rajoittaa dataa pois sellaiselta alueelta josta sen ei pitäisi sitä rajoittaa.

    Esim. olkoon alku pvm: 2004-01-01, alku time: 00:00:00 ja loppu pvm 2004-01-03, loppu time: 12:00:00

    SQL lauseeni palauttaa dataa päivämääriltä 01-03, jolloin kello on 00-12. (Oikeasti haluaisin koko datan annetusta kellonajasta aloituspäivänä aina lopetuspäivän kellon aikaan saakka.)

    Äänestä

  • crake kirjoitti:

    Ikävä kyllä en pysty laittamaan samaan sarakkeeseen tietoja, koska tietokantaan on alunperin tehty "date, time" eri sarakkeisiin ja tietokanta on tuollaisenaan käytössä. Joku konsti pitäisi keksiä...

    Pääongelmana SQL lauseessani on, että "time" määritys rajoittaa dataa pois sellaiselta alueelta josta sen ei pitäisi sitä rajoittaa.

    Esim. olkoon alku pvm: 2004-01-01, alku time: 00:00:00 ja loppu pvm 2004-01-03, loppu time: 12:00:00

    SQL lauseeni palauttaa dataa päivämääriltä 01-03, jolloin kello on 00-12. (Oikeasti haluaisin koko datan annetusta kellonajasta aloituspäivänä aina lopetuspäivän kellon aikaan saakka.)

    Kokeile jotakin tällaista. Ideana on, että haetaan erikseen ajat, jotka sijoittuvat annettujen päivämäärien väliin, sitten erikseen alkupäivämäärältä alkuajan jälkeen olevat ja vielä loppupäivämäärältä loppuaikaa ennen olevat ajat. Menee sen verran monimutkaiseksi, että tulet huomaamaan miten paljon kätevämpää ajat olisi olla samassa sarakkeessa. Anna piiskaa tietokannan suunnittelijalle :)

    select * from table where (date > minDate and date < maxDate) or (date=minDate and time>=minTime) or (date=maxDate and time

    Äänestä

  • raygold kirjoitti:

    Kokeile jotakin tällaista. Ideana on, että haetaan erikseen ajat, jotka sijoittuvat annettujen päivämäärien väliin, sitten erikseen alkupäivämäärältä alkuajan jälkeen olevat ja vielä loppupäivämäärältä loppuaikaa ennen olevat ajat. Menee sen verran monimutkaiseksi, että tulet huomaamaan miten paljon kätevämpää ajat olisi olla samassa sarakkeessa. Anna piiskaa tietokannan suunnittelijalle :)

    select * from table where (date > minDate and date < maxDate) or (date=minDate and time>=minTime) or (date=maxDate and time

    Sain tietooni myös toisen vaihtoehdon, jolla ratkaista ongelma: päivämäärä- ja aikakenttä liitetään yhteen dynaamisesti SQL:n avulla, sitten tehdään normaali vertailu niinkuin aiemmin joku neuvoi. Nyt toimii :-), kiitoksia avusta.

    $query = "SELECT * FROM $tableName WHERE CAST(CONCAT(date, CONCAT(' ', time)) AS DATETIME)>='$minDate $minTime' AND CAST(CONCAT(date, CONCAT(' ', time)) AS DATETIME)

    Äänestä

Kommentoi aloitusta


crake kirjoitti:

Miten tehdään sql kysely (MySQL-tietokantaan), jossa rajoittavia tekijöitä ovat aloitus- ja lopetuspäivämäärä sekä aloitus- ja lopetuskellonajat?

Kyselyn pitäisi palauttaa aikavälin data.
Kellonaika tarkentaa annetun päivämäärien ajanhetkeä.

Perl-koodini, jossa sql query, mutta ei toimi:

$query = "SELECT * FROM $tableName WHERE (date>='$minDate' AND time>='$minTime') AND (date

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu