Supondo que o banco de dados seja MS SQL Server 2012 ou superior, aqui está uma solução que funciona. A instrução básica contém o try-parse in-line:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Aqui está o que implementamos na versão de produção:
UPDATE dbo.StagingInputReview
SET ReviewedOn =
ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
As colunas ModifiedOn e ModifiedBy são apenas para fins de rastreamento de banco de dados interno.
Consulte também essas referências do Microsoft MSDN:
Embora a coisa CONVERT funcione, você realmente não deve usá-la. Você deve se perguntar por que está analisando valores de string no SQL-Server. Se este é um trabalho único em que você está corrigindo manualmente alguns dados, você não obterá esses dados outra vez, não há problema, mas se algum aplicativo estiver usando isso, você deve alterar algo. A melhor maneira seria usar o tipo de dados "data". Se for uma entrada do usuário, isso é ainda pior. Em seguida, você deve primeiro fazer alguma verificação no cliente. Se você realmente deseja passar valores de string onde o SQL-Server espera uma data, você sempre pode usar o formato ISO ('AAAAMMDD') e ele deve converter automaticamente.
fonte
Você pode usar:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Referência: CAST e CONVERT (Transact-SQL)
fonte
fará o que for necessário, o resultado:
fonte