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

Errore SQL:la conversione di un tipo di dati varchar in un tipo di dati datetime ha prodotto un valore fuori intervallo

I formati di stringa datetime sicuri da utilizzare in SQL Server sono

YYYYMMDD HH:MM:SS o YYYY-MM-DDTHH:MM:SS .

La conversione che hai avrà esito negativo se SET DATEFORMAT è dmy. IMPOSTA LINGUA imposterà automaticamente il formato della data per te. Penso entrambi german e norwegian usa dmy.

Questo fallirà:

set language norwegian

declare @F7 varchar(10) = '26/04/2011'
declare @F8 varchar(10) = '00:09:13'

DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'/'+SUBSTRING(@F7,4,2)+'/'+LEFT(@F7,2)

DECLARE @time DATETIME
SET @time =  CONVERT(DATETIME, @Date + ' ' + @F8)

Fai invece in questo modo (usando AAAA-MM-GGTHH:MM:SS) per essere sicuro indipendentemente dalle impostazioni di lingua/formato data.

declare @F7 varchar(10) = '26/04/2011'
declare @F8 varchar(10) = '00:09:13'

DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'-'+SUBSTRING(@F7,4,2)+'-'+LEFT(@F7,2)

DECLARE @time DATETIME
SET @time =  CONVERT(DATETIME, @Date + 'T' + @F8)