0
votes

Essayer de convertir une date julienne à 7 chiffres en format MMDDyy

J'essaie de convertir une date de 7 chiffres Julian / Mainframe en une date de calendrier du format MMDDyy dans SQL Server. Un exemple de cette date de Julian 2005020 strong>, où les 4 premiers chiffres sont l'année, 2005 et les trois derniers sont le numéro de la journée dans un calendrier, de 020 = 20 janvier. Je aurais donc besoin de Pour obtenir cette date sous le numéro 012005 (MMDDyy) dans SQL Server.

J'utilise la requête suivante, mais continue à obtenir une erreur après avoir chargé quelques enregistrements: P>

DATEFROMPARTS([julianDateColumn]/1000,1,[julianDateColumn] % 1000)


4 commentaires

Skip Yymmdd, utilisez AAAA-MM-DD à la place! (Je vois 050120 au 1er mai: ST 2020, ou était-ce le 5 janvier ?.)


Qu'en est-il 070809 @jarlh? Est que le 07 août 2009, 08 juillet 2009, 09 août 2007, soit peut-être même le 08 septembre 2007.;)


@Larnu, ma grand-mère est née en 1907. On dirait une date de cette année.


Bien sûr, quelle est la stupide de moi de ne pas répertorier le 1907 août 09. :)


3 Réponses :


2
votes

Le plus simple semblerait être de prendre la gauche comme l'année et de l'ajout des jours (-1) pour faire une date. De plus, plutôt que d'utiliser un format de mmddyy code> Je vais aller directement une date date code> DataType. Si vous le souhaitez dans un format spécifique, c'est pour votre couche de présentation.

SELECT YT.JulianDate
FROM dbo.YourTable YT
     LEFT JOIN dbo.CalendarTable CT ON YT.JulianDate = CT.JulianDate
WHERE CT.JulianDate IS NULL;


5 commentaires

Ça a marché! Malheureusement, il vomissait toujours la même erreur de "La conversion a échoué lors de la conversion de la date et / ou du temps de la chaîne de caractères". après avoir chargé des enregistrements.


On dirait que vous avez une valeur non valide puis, @Roger. C'est pourquoi stocker des données dans une autre chose qu'un type de données de date réelle est une mauvaise idée. Nous avons besoin de plus de données d'échantillons ici, en particulier des valeurs qui ne convertissent pas.


On dirait qu'une table de calendrier pourrait être une meilleure solution, vous pouvez donc trouver les mauvaises dates aussi.


Ajout d'une solution de tableau de calendrier que vous pouvez utiliser pour trouver vos mauvaises données, @Roger.


C'est génial! Merci beaucoup! Je l'ai réduit à une bibliothèque spécifique qui contient cette mauvaise donnée, je vais le tester plus tard ce soir pour voir ce que je peux trouver, merci encore!



0
votes

Je pense que j'utiliserais datefromparts () et daaddd () : xxx


0 commentaires

0
votes
select Format(cast(concat(substring('2005020', 1, 4), '-', Month(cast(substring('2005020', 5, len('2005020')) as int)) ,'-', day(dateadd(day,-1,cast(substring('2005020', 5, len('2005020')) as int ) )  )) as date), 'MMddyy') 

0 commentaires