Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych datetime

31 września nie jest datą, więc SQL nie może przekonwertować jej na taką datę.

Na marginesie powinieneś zakodować daty w niespecyficznym formacie kulturowym (rrrrMMdd). 01/08/2012 może przekonwertować się na 1 sierpnia na twoim serwerze, ale działać na innym i może to być 8 stycznia. 20120801 zostanie przekonwertowany na 1 sierpnia wszystkich maszyny.

Dodatkowo Dlaczego konwertujesz daty na NVARCHAR? ? Usuwasz wszelkie korzyści z posiadanych indeksów, a także przeprowadzasz niepotrzebne konwersje niejawne i jawne. Zakładając, że MESSAGEINSERTDATE to kolumna DATETIME, której możesz po prostu użyć

WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

Jeśli chcesz usunąć czas z MESSAGEINSERTDATE użyj

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. Co to jest literał znaku zerowego w TSQL?

  2. INSTR() odpowiednik w SQL Server

  3. Zwracanie procedur i funkcji składowanych w bazie danych programu SQL Server:PROCEDURY (przykłady T-SQL)

  4. Separator tysięcy w SQL Server 2008 dla kolumny

  5. Jak zmienić wartości dla edycji Top X i wybrać Top X Rows w SQL Server Management Studio (SSMS) — SQL Server / TSQL Tutorial, część 20