Conversion du champ de date varchar en type de données datetime [duplicate]
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
À condition que toutes vos données soient au format, yyyy-MM-ddThh:mm:ss.nnnnnnn
vous 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.
-- 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:
- Ajouter une nouvelle colonne à votre table pour DateTime
- 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.
- 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