Cast / Convertir nvarchar en datetime

Oct 01 2020

j'ai une table:

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

La table a une énorme quantité de ces données. L'horodatage de la colonne est le type de données "nvarchar". Et j'ai besoin de trier les données par date ou de les utiliser dans les clauses WHERE pour la contrainte par date, donc j'ai besoin de convertir "horodatage" en datetime. Mais je ne peux pas. J'ai essayé de convertir et de lancer mais j'ai toujours échoué.

Aucun conseil?

THX.

Réponses

1 Larnu Oct 01 2020 at 12:03

Corrigez votre conception et remplacez la colonne par un type de données de date et d'heure. Étant donné que vos données sont précises à 1 seconde, a datetime2(0)semble approprié ici. Nous devons d'abord changer le "format" de la nvarcharvaleur en un format ISO. Nous allons utiliser le format ISO8601 (aaaa-mm-jjThh: mi: ss.mmm) car il est sans ambiguïté:

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

Vous pouvez maintenant ALTERla table et changer le type de données en datetime2(0):

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

Je recommande également d'utiliser un nom différent de celui timestampde votre colonne. timestampest un synonyme obsolète de rowversion, donc son utilisation peut le rendre assez déroutant; d'autant plus qu'il rowversionne s'agit pas d'une valeur de date et d'heure mais d'une binaryvaleur et ne peut pas être convertie en un type de données de date et d'heure.

2 GordonLinoff Oct 01 2020 at 11:57

Vous pouvez explicitement convertir en datetimeutilisant le convert()format 104:

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