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 J'utilise la requête suivante, mais continue à obtenir une erreur après avoir chargé quelques enregistrements: P> DATEFROMPARTS([julianDateColumn]/1000,1,[julianDateColumn] % 1000)
3 Réponses :
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;
Ç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!
Je pense que j'utiliserais datefromparts () code> et daaddd () code>:
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')
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 code> @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. :)