sql >> Database >  >> RDS >> Sqlserver

Rekenkundige overloopfout bij het converteren van expressie naar datatype datetime

31 september is geen datum, dus SQL kan het niet naar een datum converteren.

Even terzijde, je moet datums hard coderen in een cultuurspecifiek formaat (jjjjMMdd). 01/08/2012 kan converteren naar 1 augustus op uw server, maar op een andere draaien en het kan 8 januari zijn. 20120801 wordt omgezet naar 1 augustus op alle machines.

Bovendien Waarom converteert u datums naar NVARCHAR ? U verwijdert alle voordelen van indices die u heeft en voert ook onnodige impliciete en expliciete conversies uit. Uitgaande van MESSAGEINSERTDATE is een DATETIME-kolom die u gewoon zou kunnen gebruiken

WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

Als u de tijd wilt verwijderen van MESSAGEINSERTDATE gebruik

CAST(MESSAGEINSERTDATE AS DATE)



  1. Heeft MySQL Short Circuit de IF() functie?

  2. Een primaire mysql-sleutel maken zonder een geclusterde index?

  3. Welke versie van MySQL is compatibel met Airflow versie 1.10?

  4. Aan de slag met Amazon ECS en Amazon Fargate