Toon posts:

[MySQL]Datum+zoeken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Om datum te bewaren bij het plaatsen van een bestelling, schrijf ik de waarde now() in database het veld heeft als type: datetime.
Doet het perfect.

maar graag had ik een zoekveld om bv bestellingen van 12-04-2004 op te halen,
hoe kan ik die 12-04-2004 dan eigenlijk best omvormen.
of moet ik ipv now() iets anders gebruiken?

Iemand ervaring in PHP en mysql met zoeken op datum ?

Vriendelijke Bedankt!

  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Je kan de MySQL functie DATE_FORMAT gebruiken:
http://dev.mysql.com/doc/...e_and_time_functions.html

[ Voor 6% gewijzigd door raoulduke op 29-04-2004 22:36 ]

Remember, if you have any trouble you can always send a telegram to the Right People.


  • blizt
  • Registratie: Januari 2003
  • Laatst online: 22-05 10:11

blizt

Wannabe-geek

Misschien kan je met UNIX_TIMESTAMP(date_field) in je query zoeken naar de unix_timestamp van 12-04-2004 met mktime?

United we stand, and divided we fall


Verwijderd

Topicstarter
Bedankt allemaal,
zal dit eens proberen!!!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Je wil dus alleen kijken naar het datum deel van de datetime en het tijd deel negeren. Vanaf MySQL 4.1.1 kan dat zo:
SQL:
1
SELECT * FROM Orders WHERE DATEDIFF(OrderDate,'2004-04-12')=0

In oudere MySQL versies zou je het zo kunnen doen:
SQL:
1
SELECT * FROM Orders WHERE TO_DAYS(OrderDate)=TO_DAYS('2004-04-12')

| Toen / Nu


Verwijderd

Topicstarter
Bedankt werkt perfect !

wel moeten gebruikmaken van laatste code stuk, heb nog latere versie draaien :)

Merci!!

Verwijderd

SuperRembo schreef op 30 april 2004 @ 10:42:
Je wil dus alleen kijken naar het datum deel van de datetime en het tijd deel negeren. Vanaf MySQL 4.1.1 kan dat zo:
SQL:
1
SELECT * FROM Orders WHERE DATEDIFF(OrderDate,'2004-04-12')=0

In oudere MySQL versies zou je het zo kunnen doen:
SQL:
1
SELECT * FROM Orders WHERE TO_DAYS(OrderDate)=TO_DAYS('2004-04-12')
Levert het gebruik van die functie's niet een fulltable scan op ? (lees: langzame query ?)

Je kan beter iets doen van
SELECT * FROM orders WHERE orderdate>DateMin AND orderdate<DateMax

waarbij DateMin = ZoekDate - 1 and DateMax=ZoekDate+1 (en beide hetzelfde type als OrderDate).

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Verwijderd schreef op 01 mei 2004 @ 11:15:
[...]


Levert het gebruik van die functie's niet een fulltable scan op ? (lees: langzame query ?)

Je kan beter iets doen van
SELECT * FROM orders WHERE orderdate>DateMin AND orderdate<DateMax

waarbij DateMin = ZoekDate - 1 and DateMax=ZoekDate+1 (en beide hetzelfde type als OrderDate).
Volgens mij levert dit altijd een fulltable scan op, tenzij er een index op dit datumveld staat, dan zou het zonder de TO_DAYS inderdaad sneller zijn.
Als dit vaak en veel voorkomt is het wellicht verstandiger om bij het inserten, niet alleen de datum te inserten maar ook alvast de TO_DAYS(NOW()) waarde in een kolom te zetten met een index erop.

Verwijderd

beetle71 schreef op 01 mei 2004 @ 12:47:
[...]
Volgens mij levert dit altijd een fulltable scan op, tenzij er een index op dit datumveld
Ga ik wel even vanuit als TS op datum wilt zoeken.
Pagina: 1