Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mySQL] Alleen jaartal, maar geen maand en dag

Pagina: 1
Acties:

  • Fok83
  • Registratie: Juni 2003
  • Laatst online: 27-09 00:15
Ik heb het volgende probleem waar ik maar geen oplossing voor kan vinden:

Ik wil met een select opdracht een datum (als jjjj-mm-dd opgeslagen in een date kolom) uit een date kolom halen. Maar om de een of andere reden komt alleen het jaartal tevoorschijn, alles vanaf het eerste streepje (incl. het streepje zelf) blijft dus achter in de DB.

Dit is een voorbeeldje van de gebruikte code:

$datumsql = 'select datum from blabla...

Vervolgens ga ik middels $datumsql['datum'] met de datum aan de slag, maar dit toont dan enkel het jaartal.

Iemand enig idee hoe ik de complete datum (liefst zonder streepjes maar incl. maand en dag) uit de DB kan halen?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
Fok83 schreef op woensdag 02 april 2008 @ 11:50:
Ik heb het volgende probleem waar ik maar geen oplossing voor kan vinden:

Ik wil met een select opdracht een datum (als jjjj-mm-dd opgeslagen in een date kolom) uit een date kolom halen. Maar om de een of andere reden komt alleen het jaartal tevoorschijn, alles vanaf het eerste streepje (incl. het streepje zelf) blijft dus achter in de DB.

Dit is een voorbeeldje van de gebruikte code:

$datumsql = 'select datum from blabla...

Vervolgens ga ik middels $datumsql['datum'] met de datum aan de slag, maar dit toont dan enkel het jaartal.
Eerst even dit: een datum heeft geen formaat. Een datum is een datum, klaar. De jjjj-mm-dd die jij ziet (in je query browser, console, whatever) is slechts een weergave van die datum. Als jij je datum ook echt als datum data-type in de database zet, dan is het onmogelijk dat een simpele 'select datum ...' alleen het jaartal laat zien.
Dingen om te controleren:
• Is je datum veld wel van het type DateTime?
• Doe je niet stiekem toch wat formatting in je query?
Laat anders eens wat data, zien, en de definitie van je tabel?
Iemand enig idee hoe ik de complete datum (liefst zonder streepjes maar incl. maand en dag) uit de DB kan halen?
Dit is puur een formatting issue, en hoor je aan de client kant te doen.

Roomba E5 te koop


  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 13-11 10:23
- Heb je per ongeluk de lengte van het veld op 4 staan?
- Kijk is met phpMyAdmin in je tabel, staan ze er wel goed in ?

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:31

MueR

Admin Devschuur® & Discord

is niet lief

Maak eens een screen van je tabel structuur ?
sig69 schreef op woensdag 02 april 2008 @ 12:02:
Als jij je datum ook echt als datum data-type in de database zet, dan is het onmogelijk dat een simpele 'select datum ...' alleen het jaartal laat zien.
Wel.

[ Voor 70% gewijzigd door MueR op 02-04-2008 12:49 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
MueR schreef op woensdag 02 april 2008 @ 12:46:
Maak eens een screen van je tabel structuur ?
[...]
Wel.
Nee:
sig69 schreef op woensdag 02 april 2008 @ 12:02:
[...]
dan is het onmogelijk dat een simpele 'select datum ...' alleen het jaartal laat zien.

[ Voor 20% gewijzigd door sig69 op 02-04-2008 13:10 ]

Roomba E5 te koop


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:31

MueR

Admin Devschuur® & Discord

is niet lief

een simpele select date_format(datum) (of SELECT YEAR(DATUM) ) is niet veel ingewikkelder. in feite doet het nauwelijks af aan de performance, en zal je alleen in de problemen komen als je een compleet brak datamodel hebt.

Ranzige manier zou zijn: SELECT LEFT(Datum,4)

[ Voor 4% gewijzigd door MueR op 02-04-2008 13:27 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
offtopic:
Ja uiteraard, maar er staat letterlijk "select datum..." en niet "select date_format(datum)...", dus je snapt heus wel dat ik een simpele select zonder functies of whatever bedoelde. Maar goed ontopic weer want hier is de TS niet mee geholpen.

Roomba E5 te koop


  • robbert
  • Registratie: April 2002
  • Laatst online: 18:22
Doe eens SHOW COLUMNS FROM mijntabel en copy/paste de uitvoer hier.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En LEFT() is niet alleen ranzig maar ook gewoon snoeihard fout :X , want je weet de servers date format helemaal niet. Anyway, het is good practice om expliciet aan te geven hoe je een datum wil presenteren.

{signature}


  • Fok83
  • Registratie: Juni 2003
  • Laatst online: 27-09 00:15
Bedankt voor jullie reacties _/-\o_

Dit is wat er aan de hand bleek te zijn:

Ik haalde die datum uit de DB en om 'm te testen sloeg ik 'm weer op in een niet date kolom, dit was de reden dat ik alleen het jaartal kreeg te zien (in die niet date kolom).

De reden voor deze foute manier van testen was omdat een vergelijking tussen de DB datum en de huidige datum, liet 'merken' dat de datums niet gelijk waren terwijl dit wel het geval was.

Dit is een voorbeeldje van die vergelijking:

$query['datum'] == date(Ymd)

Ondanks gelijke datums koos de code toch voor:

$query['datum'] != date(Ymd)

Dankzij een betere test bleek dat dit kwam omdat $query['datum'] een datum met streepjes opleverde en date(Ymd) een datum zonder streepjes.

Hier zijn volgens mij 2 oplossingen voor:

1 - De niet gebruikte oplossing:

Verander date(Ymd) -> date(Y-m-d)

2 - De gebruikte oplossing:

select date_format(datum, "%Y%m%d") as datum from enz.

Nu kan de code dus wel een correcte vergelijking maken tussen de datums (welke nu dus beide geen streepjes bevatten) :*)

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:31

MueR

Admin Devschuur® & Discord

is niet lief

functie argumenten waar geen constante of variabele aan te pas komt gaan tussen single-quotes...

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1