SQL:n perusteet DATE:n suhteen hukassa

Taulussa on muuttuja date_arvo. Siellä on rivi esim. "2009-01-10 19:19:53"

Mitä teen väärin?

SELECT * FROM taulu WHERE date_arvo like '%2009-01-10 %';
3899
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Like on tarkoitettu merkkijonoille. Ilmeisesti date_arvo on mallia TIMESTAMP. Siihen puree normaalit matemaattiset vertailuoperaattorit.

Äänestä

SELECT * FROM taulu WHERE CAST(date_arvo AS DATE)='2009-01-10'

Jotain tuollaista. Kovasti taidot ovat ruosteessa. Pitäisi oikeastaan katsoa manuaalista.

Äänestä

Kokeilepa ilman prosenttimerkkejä ja ylimääräisiä välejä. Toiminee ainakin oraclessa, ellen ihan väärin muista.
Ehkä järkevämpää olisi hakea rivit, joilla date_arvo >= 2009-01-10 ja < 2009-01-11. Jälkimmäiseen tietysti joku tietokannan tarjoama funktio, jolla lisätään yksi päivä (esim. oraclessa taitaa mennä ihan date_arvo 1).

LIKE sinänsä on stringivertailu. Voit toki castata tuon stringiksi ja sitten toimii, mutta jos tuo on indeksoitu, voi suorituskyky ihan pikkasen romahtaa (pitäisi varmaan olla, jos rivejä on yhtään enemmän ja tuo on ainut hakukriteeri).

Yleisenä periaatteena: käytä like- hakua vain jos se on oikeasti välttämätön. , = ja = ovat parempia, vaikka niitä joutuisi käyttämään enemmänkin.

Äänestä

Kommentoi aloitusta


helppo tietävälle kirjoitti:

Taulussa on muuttuja date_arvo. Siellä on rivi esim. "2009-01-10 19:19:53"

Mitä teen väärin?

SELECT * FROM taulu WHERE date_arvo like '%2009-01-10 %';

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