Transmitir / convertir nvarchar a datetime

Oct 01 2020

tengo mesa:

id   timestamp
1    31.10.2020 16:32:11
2    09.09.2020 09:15:49
3    22.04.2020 02:48:15

La tabla tiene una gran cantidad de estos datos. La marca de tiempo de la columna es del tipo de datos "nvarchar". Y necesito ordenar los datos por fecha o usarlos en cláusulas DONDE para la restricción por fecha, así que necesito convertir "marca de tiempo" a fecha y hora. Pero no puedo. Intenté convertir y emitir, pero aún fallé.

¿Algún consejo?

Gracias.

Respuestas

1 Larnu Oct 01 2020 at 12:03

Corrija su diseño y cambie la columna a un tipo de datos de fecha y hora. Teniendo en cuenta que sus datos tienen una precisión de 1 segundo, datetime2(0)parece apropiado aquí. Primero tenemos que cambiar el "formato" del nvarcharvalor a un formato ISO. Vamos a utilizar el formato ISO8601 (aaaa-mm-ddThh: mi: ss.mmm) ya que no es ambiguo:

UPDATE dbo.YourTable
SET [timestamp] = CONVERT(nvarchar(20),TRY_CONVERT(datetime2(0), [timestamp], 4), 126);

Ahora puede ALTERla tabla y cambiar el tipo de datos a datetime2(0):

ALTER TABLE dbo.YourTable ALTER COLUMN [timestamp] datetime2(0) NULL;

También recomiendo usar un nombre diferente al timestampde su columna. timestampes un sinónimo obsoleto de rowversion, por lo que su uso puede volverlo bastante confuso; especialmente porque rowversionno es un valor de fecha y hora, sino un binaryvalor y no se puede convertir a un tipo de datos de fecha y hora.

2 GordonLinoff Oct 01 2020 at 11:57

Puede convertir explícitamente a un formato de datetimeuso convert()104:

select convert(datetime, '31.10.2020 16:32:11', 104)