Conversion du champ de date varchar en type de données datetime [duplicate]

Dec 16 2020

J'ai fait l'erreur d'utiliser varchar pour stocker mes données qui représentent la date / heure. Maintenant, j'essaye de convertir ma colonne de données texte, stockée en tant que varchar, comme ceci:

2020-11-25T14:22:41.3539327Z

Dans une colonne qui stocke un type de données datetime.

Réponses

1 Larnu Dec 16 2020 at 02:49

À condition que toutes vos données soient au format, yyyy-MM-ddThh:mm:ss.nnnnnnnvous pouvez simplement changer le type de données de la colonne:

ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);

Si vous avez besoin du fuseau horaire, utilisez-le à la datetimeoffset(7)place.

Brad Dec 16 2020 at 02:33
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)

en fonction de la précision dont vous avez besoin, vous pouvez utiliser le lien ci-dessous pour le trouver et changer le 120 en le nombre dont vous avez besoin pour cette précision.

https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

Pour réparer votre table, vous devez suivre ces étapes:

  1. Ajouter une nouvelle colonne à votre table pour DateTime
  2. Exécutez une mise à jour sur votre table en utilisant le Convertir ci-dessus pour mettre à jour la nouvelle colonne avec la valeur convertie de votre champ varchar.
  3. Supprimez ensuite la colonne contenant les données varchar.

Code pour suivre les étapes décrites ci-dessus

ALTER TABLE dbo.TableName ADD NewDateTimeCOL DATETIME

-- NOTE if your table is LARGE you will not want to do a direct update like this but do looping for performace purposes
UPDATE dbo.TableName
SET NewDateTimeCOL = convert(varchar, OldDateTimeCOL, 120)


ALTER TABLE dbo.TableName DROP COLUMN OldDateTimeCOL