sql >> Database >  >> RDS >> Sqlserver

Rekenkundige overloopfout bij het converteren van expressie naar datatype datetime. (terwijl datum en tijd worden weergegeven..)

Je probleem is dat je probeert te convert de numerieke naar een datetime , en dit werkt gewoon niet.

U moet uw numeric . omdraaien eerst in een string:

declare @yr_mnth_dt as numeric;
set @yr_mnth_dt = 20130822;

select yr_mnth_dt = cast(cast(@yr_mnth_dt as char(8)) as datetime);

SQL Fiddle met demo.

Wanneer u een numeriek type probeert te converteren naar een datetime , SQL Server probeert de numerieke waarde als het aantal dagen toe te voegen aan de datum 01-Jan-1900 . In jouw geval probeert dit miljoenen dagen toe te voegen, en vandaar de overloopfout.

CONVERT werkt ook prima, als je wilt:

select yr_mnth_dt = convert(datetime, convert(char(8), @yr_mnth_dt));

SQL Fiddle met demo.



  1. Hoe de kolommen opnieuw te definiëren die worden geretourneerd door een opgeslagen procedure in SQL Server

  2. Hoe te repareren "Het COMMIT TRANSACTION-verzoek heeft geen overeenkomstige BEGIN TRANSACTION" in SQL Server

  3. Hoe de leeftijd vanaf de geboortedatum in SQL te berekenen

  4. Oracle 10g tijdzone verwarring