Convertir flotteur de type datetime
J'ai un FLOAT
champ pour une date qui ressemble à ceci:
+-----------+
| FloatDate |
+-----------+
| 1012013 | -- Jan 1
| 3262013 | -- Mar 26
| 11072013 | -- Nov 7
| 10012013 | -- Oct 1
+-----------+
et je veux insérer ces données à une autre table, et le type de données de ses dateField est DATETIME
.
Donc, je suis en train de convertir FloatDate valeurs DATETIME mais je suis juste en gardant à défaut..
J'ai essayé
INSERT INTO NEWTABLE
(DateTimeDate)
SELECT CONVERT(DATETIME, CAST(CAST(FloatDate AS INTEGER) AS CHAR), 112)
FROM OLDTABLE
mais cela me donne une erreur qui dit que
Conversion a échoué lors de la conversion de type datetime de chaîne de caractères
Il semble que cela fonctionne si le format de la date de FloatDate est AAAAMMJJ. Donc, si je fais ça, ça marche.
DECLARE @test FLOAT
SET @test = 2132013
SELECT @test, CONVERT(DATETIME, CAST(RIGHT(CAST(@test AS INTEGER), 4) AS CHAR(4)) +
CASE WHEN LEN(CAST(@test AS INTEGER)) = 7 THEN '0' + CAST(LEFT(CAST(@test AS INTEGER), 3) AS CHAR(3))
WHEN LEN(CAST(@test AS INTEGER)) = 8 THEN CAST(LEFT(CAST(@test AS INTEGER), 4) AS CHAR(4)) END, 1)
Mais, je me demande si je fais ce trop compliqué et manquant de peu la solution la plus simple, ou est-ce la seule façon que je peux obtenir??
- Est
3262013
Le 26 Mars 2013? Si oui, pouvez-vous nous montrer ce 9 Mars pourrait ressembler, et le 5 octobre, et le 11 janvier? - Pourquoi dans le monde, êtes-vous abuser des pauvres à virgule flottante de type de données pour effectuer de tels rites impies?
- Mon point exactement...
- c'est le téléchargement des données à partir d'un autre système, donc je n'ai aucun contrôle sur leur conception de base de données. Je voudrais qu'il a été stocké dans datetime:(
Vous devez vous connecter pour publier un commentaire.
En supposant que vous avez d'autres valeurs comme:
Ensuite, vous pouvez faire ceci:
Résultats:
Dans votre exemple, il serait:
Bien sûr, vous pourriez avoir quelques mauvaises données, même une fois que vous obtenez la syntaxe droit pour valide valeurs. Depuis que vous avez utilisé
FLOAT
vous n'obtenez pas inhérente à la validation, afin que la colonne peut contenir-999
ou45671213
etc.Avez-vous trouvé ce douloureux? BON! Il devrait être douloureux. Vous devriez retourner à celui qui a décidé de stocker des dates dans un
FLOAT
colonne et coup de pied dans le tibia. Demandez-leur s'ils stockent des salaires à l'aide d'une géographie type de données. Je suis content que vous êtes la fixation de ce mais ces gens ne devraient pas être autorisés n'importe où près de conception de base de données.Enfin, merci de ne pas le faire:
Toujours spécifier une longueur. Voici pourquoi:
si vous avez un numéro de huit chiffres (float), vous pouvez tout simplement faire ce
cette deuxième méthode est plus propre
Pour être en mesure de convertir Float dates en format datetime, vous avez besoin de convertir les données float en Varchar. C'est la raison derrière pourquoi @yogesh-sharma réponse œuvres.