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?
InformationsquelleAutor BTurkeli | 2017-04-02