Transmitir / convertir nvarchar a datetime
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
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.
Puede convertir explícitamente a un formato de datetimeuso convert()104:
select convert(datetime, '31.10.2020 16:32:11', 104)