2012-04-24 30 views

Respuesta

102
CONVERT(datetime, '24.04.2012', 104) 

debe hacer el truco. Consulte aquí para obtener más información: "CAST and CONVERT (Transact-SQL)"

+3

No funciona. TSQL muestra este error: Sintaxis incorrecta cerca de la palabra clave 'CONVERTIR'. – pordi

+0

Elimine el espacio entre CONVERT y paren: CONVERT (datetime, '24 .04.2012 ', 104) – MAbraham1

+0

Como se explica en el documento vinculado, el' 104 'indica el formateo de la cadena de entrada. – DCShannon

24

Microsoft SQL Date Formats

CONVERT(DateTime, DateField, 104) 
+0

'24-04- 2012' no será reconocido como una fecha válida porque esperará 'MM-dd-aaaa' – Khan

+2

¿qué pasa con' CONVERTIR (DateTime, DateField, 104) '? Esto debería indicarle al servidor sql que use el formato dd.mm.aaaa ... – therealmitchconnors

+0

Sí, funciona, también lo encontré, ¡gracias! –

6

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.

+3

¿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í? –

+0

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

+0

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) –

10

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:

+0

Utilizamos este en el código de producción. – MAbraham1

0
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate 

va a hacer lo que se necesita, resultado:

2012-04-24 00:00:00.000 
Cuestiones relacionadas