¿Cómo puedo convertir una cadena a una fecha en T-SQL?¿Cómo convertir cadena a la fecha T-SQL?
Mi caso de prueba es la cadena: '24.04.2012'
¿Cómo puedo convertir una cadena a una fecha en T-SQL?¿Cómo convertir cadena a la fecha T-SQL?
Mi caso de prueba es la cadena: '24.04.2012'
CONVERT(datetime, '24.04.2012', 104)
debe hacer el truco. Consulte aquí para obtener más información: "CAST and CONVERT (Transact-SQL)"
CONVERT(DateTime, DateField, 104)
'24-04- 2012' no será reconocido como una fecha válida porque esperará 'MM-dd-aaaa' – Khan
¿qué pasa con' CONVERTIR (DateTime, DateField, 104) '? Esto debería indicarle al servidor sql que use el formato dd.mm.aaaa ... – therealmitchconnors
Sí, funciona, también lo encontré, ¡gracias! –
que puede utilizar:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Referencia: CAST and CONVERT (Transact-SQL)
Aunque la cosa convertir dichas obras, que en realidad no debería usarlo. Debería preguntarse por qué está analizando valores de cadena en SQL-Server. Si este es un trabajo de una sola vez en el que está arreglando manualmente algunos datos, no obtendrá esos datos en otro momento, esto está bien, pero si alguna aplicación está usando esto, debe cambiar algo. La mejor manera sería usar el tipo de datos "fecha". Si esto es información del usuario, esto es aún peor. Entonces primero deberías verificar el cliente. Si realmente desea pasar valores de cadena donde SQL-Server espera una fecha, siempre puede usar el formato ISO ('AAAAMMDD') y debe convertir automáticamente.
¿Qué ocurre con una situación en la que está importando archivos de datos de algún sistema externo y la columna de entrada está en uno de estos formatos, p."31/05/2013", pero que viene como una cadena? ¿Y está escribiendo, por ejemplo, un procedimiento almacenado para importar esos datos o utilizando SSIS para importarlos? Entonces CONVERTAR sería lo apropiado para usar, ¿no es así? –
No necesariamente, en las situaciones en que MS SQL Server aloja modelos de datos analíticos, a diferencia de los de transacciones, está perfectamente bien usar CONVERT porque tiene que lidiar con muchas fuentes externas que no llegarían fácilmente como una fecha tipo (como David Barrows aludió a arriba). – Will
El formato literal de serie predeterminado para las fechas es [YYYY-MM-DD] (https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql) –
Aquí hay una solución que funciona bien. La declaración básica contiene el análisis sintáctico try-in-line:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Esto es lo que hemos implementado 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())
-- Check for empty/null/'NULL' text
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
Las columnas ModifiedOn y ModifiedBy son sólo para propósitos de seguimiento de base de datos interna.
Véase también estas referencias Microsoft MSDN:
Utilizamos este en el código de producción. – MAbraham1
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
va a hacer lo que se necesita, resultado:
2012-04-24 00:00:00.000
No funciona. TSQL muestra este error: Sintaxis incorrecta cerca de la palabra clave 'CONVERTIR'. – pordi
Elimine el espacio entre CONVERT y paren: CONVERT (datetime, '24 .04.2012 ', 104) – MAbraham1
Como se explica en el documento vinculado, el' 104 'indica el formateo de la cadena de entrada. – DCShannon