Order by datum d-m-y

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeroen de wilde

Jeroen de wilde

08/06/2020 23:52:33
Quote Anchor link
Beste,

ik probeer nu SELECT * FROM items ORDER by Datum.
Maar dit lukt niet door het formaat d-m-y.
Is dit mogelijk?

Alvast bedankt
 
PHP hulp

PHP hulp

17/01/2022 05:07:14
 
- Ariën -
Beheerder

- Ariën -

08/06/2020 23:55:43
Quote Anchor link
Zo'n query moet gewoon werken.

De vraag is eigenlijk: Wat gaat er volgens jou niet goed?
 
Jeroen de wilde

Jeroen de wilde

08/06/2020 23:58:06
Quote Anchor link
hij plaatst de datums niet juist.
vb
01-01-2020
02-01-1999
03-01-2020
 
Thomas van den Heuvel

Thomas van den Heuvel

08/06/2020 23:58:35
Quote Anchor link
Datums zou je op moeten slaan volgens standaarden, yyyy-mm-dd is dan een makkelijke, omdat in dat formaat de textuele sortering de numerieke sortering volgt zodat je op een zinnige manier datums voor en na een specifieke datum of in een interval kunt oproepen.

Hoe je de datum vervolgens weergeeft (bijvoorbeeld als d-m-y) staat hier compleet los van.

Terug naar de tekentafel van je database-ontwerp dus.
Gewijzigd op 08/06/2020 23:59:17 door Thomas van den Heuvel
 
- Ariën -
Beheerder

- Ariën -

08/06/2020 23:59:09
Quote Anchor link
Waarom gebruik je geen DATETIME?
Ik gok dat je een VARCHAR hebt, en dus heeft SQL geen enkele weet dat je een datumformaat gebruikt, en sorteert hij maar op de dag. Want na 1 komt 2, en daarna komt weer 3.
Gewijzigd op 09/06/2020 00:00:40 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

09/06/2020 00:09:20
Quote Anchor link
De vergelijkingen (zowel teksten alsook DATETIMEs) zijn sowieso allebei tekstueel. Daarom is het dus belangrijk dat de tijdseenheid met het grootste gewicht vooraan staat (het jaar).

De datums worden alfabetische geordend. Dus wordt er vanaf het begin van de (datum)string gekeken wat groter/kleiner is. Dit is niet hetzelfde als een numerieke vergelijking.

Vergelijk:
SELECT 312 < 41;
> 0
(312 komt numeriek niet voor 41)

SELECT '312' < '41';
> 1
('312' komt textueel (lexicografisch) wel voor '41')
 
Ivo P

Ivo P

09/06/2020 12:37:21
Quote Anchor link
Als de kolom een varchar is, is er nog steeds de mogelijkheid dat iemand er via een omweg misschien toch "vandaag" in weet te proppen.
of 99-02-MMXX

Date / datetime geeft in elk geval ook al naar de database aan waar het om gaat, zodat die er met interne opslag en extra functies al rekening mee kan houden.

Ik kan me voorstellen dat
WHERE YEAR(datumkolom) = 2020 beter werkt dan
WHERE datumkolom LIKE '2020%' of iets met substring()
 
Thomas van den Heuvel

Thomas van den Heuvel

09/06/2020 16:51:45
Quote Anchor link
Ivo P op 09/06/2020 12:37:21:
Als de kolom een varchar is, is er nog steeds de mogelijkheid dat iemand er via een omweg misschien toch "vandaag" in weet te proppen.
of 99-02-MMXX


Sja, als je je input niet valideert dan houdt het sowieso een beetje op :p.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.