Conversion explicite de type de données date de l'int n'est pas autorisé
Je suis en train de calculer l'ÂGE des contrats, cependant j'obtiens l'erreur
Conversion explicite de type de données date de l'int n'est pas autorisé
C'est mon code:
SELECT
Contract_hist.*,
IB.*,
CAST((CASE
WHEN (CAST(CONVERT(INT, Setup.[Start]) - CONVERT(INT,[IB].[Install_Date])) AS INT))/365 <= 0
THEN 0
WHEN (CAST(CONVERT(INT, Setup.[Start]) - CONVERT(INT,[IB].[Install_Date])) AS INT)) / 365 > 0
THEN (CAST(CONVERT(INT, Setup.[Start]) CONVERT(INT,[IB].[Install_Date])) AS INT)) / 365
END) AS INT) AS AGE
FROM
Setup, Contract_hist
INNER JOIN
IB ON Contract_hist.[System No] = IB.System_ID
Où "Le Programme D'Installation.[Démarrer]," & "[IB].[Install_Date]" sont datetime2 valeurs.
- Est-ce lié? stackoverflow.com/questions/5505935/... "un casting pour un int ne fonctionne plus dans les dernières versions de sql server". essayez d'utiliser
DATEDIFF(dd, '12/30/1899', mydatefield)
. - Mauvaises habitudes pour le coup : à l'aide de vieux-style Jointures - que les vieux style de liste séparée par des virgules des tables de style a été remplacé par le bon ANSI
JOIN
syntaxe dans la norme ANSI-92 de la Norme SQL (25 ans il ya) et son utilisation est déconseillée. Et vous devez vous PAS mélanger les deux styles ! - Alors, que proposez-vous? Quel genre de
join
dois-je utiliser?
Vous devez vous connecter pour publier un commentaire.
Peut-être cela?
Semble comme un casting pour un float/int n'est pas pris en charge dans les dernières versions de sql server. Essayez d'utiliser
DATEDIFF(dd, '12/30/1899', mydatefield)
Vous pouvez convertir ces datetime2 champs d'abord de type datetime, puis à un int.
Mais qui peut être réduit à:
Ou vous pouvez simplifier encore plus et calculer la différence dans les années directement avec datediff:
Et que l'AFFAIRE peut également être simplifiée: