sql >> Database teknologi >  >> RDS >> Sqlserver

Aritmetisk overløbsfejl ved konvertering af udtryk til datatype datetime

Den 31. september er ikke en dato, så SQL kan ikke konvertere den til en.

Som en sidebemærkning bør du fastkode datoer i et kulturuspecifikt format (ååååMMdd). 01/08/2012 kan konvertere til 1. august på din server, men køre på en anden, og det kan være den 8. januar. 20120801 konverteres til 1. august alle maskiner.

Derudover Hvorfor konverterer du datoer til NVARCHAR ? Du fjerner enhver fordel ved indekser, du har, og udfører også unødvendige implicitte og eksplicitte konverteringer. Forudsat MESSAGEINSERTDATE er en DATETIME-kolonne, du bare kunne bruge

WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

Hvis du har brug for at fjerne tidspunktet fra MESSAGEINSERTDATE brug

CAST(MESSAGEINSERTDATE AS DATE)



  1. Deterministisk sorteringsrækkefølge for vinduesfunktioner

  2. FORALL-erklæring med nedre og øvre grænse i Oracle-databasen

  3. postgreSQL sortering med tidsstempler

  4. Sådan kalder du lagret procedure med SQLAlchemy, der kræver en brugerdefineret tabelparameter