Cómo convertir cadena a fecha T-SQL?


¿Cómo puedo convertir una cadena a una Fecha en T-SQL?

Mi caso de prueba es la cadena: '24.04.2012'

Author: Philip Raath, 2012-04-24

6 answers

CONVERT(datetime, '24.04.2012', 104)

Debería hacer el truco. Vea aquí para más información: " CAST and CONVERT (Transact-SQL)"

 113
Author: Chris Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-14 11:30:24

Formatos de fecha de Microsoft SQL

CONVERT(DateTime, DateField, 104)
 24
Author: therealmitchconnors,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-24 19:26:12

Aquí hay una solución que funciona bien. La instrucción basic contiene el in-line try-parse:

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())
 -- 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 solo para fines de seguimiento interno de la base de datos.

Vea también estas referencias de Microsoft MSDN:

 12
Author: MAbraham1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 15:18:21

Aunque la cosa CONVERT funciona, en realidad no deberías usarla. Debe 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 otra vez, esto está bien, pero si alguna aplicación está utilizando esto, debe cambiar algo. La mejor manera sería utilizar el tipo de datos" fecha". Si esta es la entrada del usuario, esto es aún peor. Entonces usted debe primero hacer un poco de comprobación en el cliente. Si realmente quieres pasar valores de cadena donde SQL-Server espera una fecha, siempre puede usar el formato ISO ('AAAAMMDD') y debería convertirse automáticamente.

 7
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-19 17:18:03

Puedes usar:

SELECT CONVERT(datetime, '24.04.2012', 103) AS Date

Referencia: CAST y CONVERT (Transact-SQL)

 3
Author: Seann Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-08 01:36:56
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

Hará lo que sea necesario, resultado:

2012-04-24 00:00:00.000
 0
Author: JMMS Karunarathne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-30 03:53:23