Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur SQL :la conversion d'un type de données varchar en un type de données datetime a entraîné une valeur hors plage

Les formats de chaîne datetime sûrs à utiliser dans SQL Server sont

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

La conversion que vous avez échouera si SET DATEFORMAT est dmy. DÉFINIR LA LANGUE définira automatiquement le format de date pour vous. Je pense que les deux german et norwegian utilisez dmy.

Cela échouera :

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)

Faites comme ceci à la place (en utilisant AAAA-MM-JJTHH:MM:SS) pour être en sécurité quels que soient les paramètres de langue/format de date.

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)