Suponiendo que la base de datos sea MS SQL Server 2012 o superior, aquí hay una solución que funciona. La declaración básica contiene el try-parse en línea:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Esto es lo que implementamos en la versión de producción:
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';
Las columnas ModifiedOn y ModifiedBy son solo para fines de seguimiento de la base de datos interna.
Consulte también estas referencias de Microsoft MSDN:
Aunque lo de CONVERT funciona, en realidad no deberías usarlo. Debería preguntarse por qué está analizando valores de cadena en SQL-Server. Si este es un trabajo único en el que está arreglando manualmente algunos datos, no obtendrá esos datos en otro momento, está bien, pero si alguna aplicación lo está usando, debe cambiar algo. La mejor forma sería utilizar el tipo de datos "fecha". Si se trata de una entrada del usuario, es aún peor. Entonces, primero debería hacer un chequeo del cliente. Si realmente desea pasar valores de cadena donde SQL-Server espera una fecha, siempre puede usar el formato ISO ('AAAAMMDD') y debería convertir automáticamente.
fuente
Puedes usar:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Referencia: CAST y CONVERT (Transact-SQL)
fuente
hará lo que sea necesario, resultado:
fuente