2010-06-25 9 views
0

Ok c'est un peu une demande étrange. Nous essayons d'obtenir une déclaration «âge» formatée à sortir dans un rapport dans PeopleSoft, il fournit un constructeur basé sur «TSQL» qui n'est pas du tout utile. Nous ne pouvons pas utiliser les fonctions stockées et nous ne pouvons pas éditer l'ensemble de l'instruction SQL en une seule chose. Tout ce que nous pouvons faire est de dire champ par champ quelle est la formule, alors l'outil va joindre tous les éléments ensemble pour produire la requête. Donc, compte tenu de cette restriction, comment pouvons-nous obtenir la différence entre deux dates pour être formaté comme une phrase lisible par l'homme? par exemple. "14 ans, 3 mois et 10 jours"TSQL format la différence de date à être "YY années MM mois et JJ jours"

Toutes les idées seraient grandement appréciées.

+0

Champ par champ? Exemple pls –

+0

si vous avez une vue que vous avez SELECT Champ 1 = ..., Champ 2 = ..., etc à partir de tables OÙ Tout ce que nous pouvons toucher à l'outil est "Champ 1 =" puis appuyez sur enregistrer et déplacez vers le champ 2 = La manière la plus ridiculement agaçante de construire SQL que j'ai jamais frappé. –

Répondre

3

Si vous pouvez utiliser la concaténation de chaîne, cela vous donnera le nombre d'années:

DATEDIFF(yy, t.startdate, t.enddate) 

Cela vous donnera les mois:

DATEDIFF(mm, 
     DATEADD(yy, 
       DATEDIFF(yy, 
          t.startdate, 
          t.enddate), 
       t.startdate), 
     t.enddate) 

Et cela vous donnera la valeur jours:

DATEDIFF(dd, 
     DATEADD(mm, 
       DATEDIFF(mm, 
          DATEADD(yy, 
            DATEDIFF(yy, 
              t.startdate, 
              t.enddate), 
            t.startdate), 
          t.enddate), 
          DATEADD(yy, 
            DATEDIFF(yy, 
              t.startdate, 
              t.enddate), 
            t.startdate)), 
     t.enddate) 

Vous pouvez see & test using this saved query j'affiché sur le StackExchange Data Explorer. Il utilise Azure, utilise TSQL ...

+0

ok, test this –

+0

Non, IT l'a mis hors ligne pour une mise à niveau pour les trois prochains jours ... –

+1

@Rob: Désolé - pardon? –

0

Vous pouvez utiliser la formule que vous voulez. Vous mettez simplement le type de retour et la fonction SQL dans l'onglet expression, puis utilisez l'expression comme un champ.