Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Erro de SQL:a conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo


Os formatos de string de data e hora seguros para usar no SQL Server são

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

A conversão que você fez falhará se SET DATEFORMAT é dm. SET LANGUAGE irá definir automaticamente o formato de data para você. Acho que tanto german e norwegian use dm.

Isso falhará:
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)

Faça assim (usando AAAA-MM-DDTHH:MM:SS) para ficar seguro, independentemente das configurações de idioma/formato de 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)