1
votes

Convertir une colonne entière d'un entier à une date / heure à l'aide de SQL

J'ai une table avec une colonne entière qui contient des entiers. Je sais que ces entiers étaient auparavant des valeurs datetime. Je souhaite mettre à jour toutes les valeurs de cette colonne comme datetimes. Il y a plus de 1000 lignes. J'ai changé cette colonne d'un INT à varchar car toutes les erreurs que j'ai reçues ne m'aimaient pas passer d'un INT à DATETIME mais j'ai le même problème avec le type de données varchar.

Exemples de valeurs dans la colonne: 43873, 40706, 43873, ect

J'ai essayé les requêtes suivantes:

UPDATE WORKER SET INT_TIME = DATEFROMPARTS(INT_TIME,1,1);

UPDATE WORKER SET INT_TIME = CONVERT(datetime,INT_TIME,107);

Je reçois des erreurs comme

La conversion a échoué lors de la conversion de la date et / ou de l'heure à partir du caractère chaîne.

INT_TIME est la colonne que j'essaie de mettre à jour toutes les valeurs à une date / heure:

INT_TIME est la colonne que j'essaie de mettre à jour toutes les valeurs à une date / heure


2 commentaires

Quels dbms utilisez-vous? (En ce qui concerne la date et l'heure, de nombreux produits sont loin d'être conformes à la norme ANSI SQL. Par exemple, DATEFROMPARTS et CONVERT sont spécifiques au produit.)


J'utilise Microsoft SQL Server Studio


3 Réponses :


0
votes

Ceux-ci ressemblent au format Excel. Cela suggère quelque chose comme:

select dateadd(day, col, '1899-12-30')


2 commentaires

Que se passe-t-il ici? Cela ne mettra pas à jour la colonne, n'est-ce pas?


@WilliamStahl. . . Non. Mais là encore, vous avez une colonne INTEGER donc vous allez échouer si vous essayez de définir la valeur sur une DATE. Cela vous montre la conversion appropriée.



0
votes

Vous pouvez utiliser la fonction dateadd () :

alter table worker
    alter column int_time DATETIME

update worker
      set int_time = dateadd(day, t.int_time, 0)

Vous pouvez utiliser l'instruction update pour mettre à jour, avant de devoir modifier définition de table aussi:

select dateadd(day, t.int_time, 0) as joining_date
from tabel t;

0 ont une date par défaut 1900-01-01 00: 00: 00.000 p>


1 commentaires

Que se passe-t-il ici? Cela ne mettra pas à jour la colonne, n'est-ce pas?



0
votes
ALTER TABLE [dbo].[WORKER]
ALTER COLUMN [INT_TIME] DATETIME
This statement alters the integer column to a datetime column and parses the values automatically.

0 commentaires