sql >> Database >  >> RDS >> Mysql

mysql converteer datum naar dezelfde datum van het huidige jaar

Het antwoord van Khalid is meestal correct. Schrikkeljaar verpest de boel! Als u de voorgestelde query uitvoert waarbij de waarde van datecol '2016-02-29' is en de CURRENT_DATE bijvoorbeeld '2017-01-01' is, krijgt u null .

Een alternatieve manier om dit te doen die schrikkeljaar eleganter omgaat, is als volgt:

SELECT DATE_FORMAT(
    MAKEDATE(YEAR(CURRENT_DATE()), DAYOFYEAR(datecol)),
    '%Y-%m-%d'
) `date`
FROM t

De waarde van date hier zou 2017-03-01 zijn.

Bewerken/verduidelijken:het probleem is dat het wijzigen van het jaar '29-02-2016' naar 2017 bijvoorbeeld '2017-02-29' oplevert, wat geen geldige datum is. Dan resulteert het uitvoeren van DATE_FORMAT('2017-02-29', '%Y-%m-%d') in null . Een demo van het probleem is hier:

http://sqlfiddle.com/#!9/c5358/11

Na het bekijken van mijn antwoord realiseerde ik me echter dat ik een ander probleem had door MAKEDATE te gebruiken, aangezien elke datum op een schrikkeljaar na 28 februari dagen+1 is voor een "normaal" jaar met 365 dagen. Als datecol ='2016-03-01' en het huidige jaar 2017 was, dan zou de geconverteerde datum '2017-03-02' zijn, niet '2017-03-01' zoals gewenst. Een betere aanpak is als volgt:

SELECT
DATE_FORMAT(DATE_ADD(datecol, INTERVAL (YEAR(CURRENT_DATE()) - YEAR(datecol)) YEAR), '%Y-%m-%d') `date`
FROM t;

Deze methode verandert elke 29 februari in de 28e en houdt verder alle andere datums precies zoals u ze zou verwachten. Een demo van de oplossing is hier:

http://sqlfiddle.com/#!9/c5358/12



  1. Waarom hebben we berichtenmakelaars zoals RabbitMQ nodig boven een database zoals PostgreSQL?

  2. Waarom geeft SQL-server deze fout:Kan de waarde NULL niet invoegen in kolom 'id'?

  3. rails - postgres-fout:Reden:Incompatibele bibliotheekversie:libpq.5.dylib vereist versie 1.0.0 of hoger,

  4. Voorkomen van aangrenzende/overlappende items met EXCLUDE in PostgreSQL