Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Грешка при аритметично препълване при преобразуване на израз в тип данни datetime

31 септември не е дата, така че SQL не може да я преобразува в такава.

Освен това трябва да кодирате твърдо датите в неспецифичен за култура формат (ггггММдд). 01/08/2012 може да се преобразува на 1 август на вашия сървър, но да работи на друг и може да е 8 януари. 20120801 ще се преобразува в 1 август на всички машини.

Освен това защо конвертирате датите в NVARCHAR ? Вие премахвате всички предимства на индексите, които имате, и също така извършвате ненужни неявни и явни преобразувания. Приемайки MESSAGEINSERTDATE е колона DATETIME, която можете просто да използвате

WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

Ако трябва да премахнете часа от MESSAGEINSERTDATE използвайте

CAST(MESSAGEINSERTDATE AS DATE)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на процесора от база данни?

  2. Използване на UDF за стойност по подразбиране на колона

  3. Плюсове и минуси на TRUNCATE срещу DELETE FROM

  4. Свойството ConnectionString не е инициализирано грешка във VB.NET

  5. NULL стойностите са изключени. Защо?