-2
votes

Formater les données calculées

J'essaie de formater des années et des mois d'une manière comme YY-mm

Je peux calculer comme ceci pour obtenir la valeur de mon année: p> xxx pré>

et ceci Pour obtenir la valeur des mois: p>

ROUND(months_between(sysdate,hiringdate))


5 commentaires

convertir en cordes puis concat avec +


Veuillez fournir des exemples de données, des résultats souhaités et une balise de base de données.


Êtes-vous sûr que vous voulez seulement utiliser 2 chiffres depuis des années? Cela peut causer des problèmes.


@Tom Eh bien, juste le nombre de nombreuses années entre aujourd'hui et leur date d'embauche. 2 chiffres est tout ce qui est nécessaire pour cette information


@ user11119624 Vous devez étiqueter la question avec la balise de base de données appropriée et ajouter vos échantillons de données à la question elle-même.


4 Réponses :


-1
votes

Probablement un million de façons de le faire. L'un d'eux est celui-ci:

SELECT RIGHT (CAST (YEAR (GETDATE()) AS VARCHAR(4)), 2) + '-' + RIGHT ('0' + CAST (MONTH (GETDATE()) AS VARCHAR (2)), 2)


3 commentaires

Comment allez-vous le faire avec TO_CHAR?


Ni droit ni Année ni getDate sont des fonctions Oracle.


@Wernfrieddomschéit - En justice à ce répondant, l'OP a été publié à l'origine la question simplement comme SQL . Il a ajouté la balise oracle 20 minutes après Cette réponse a été postée.



0
votes

Cela dépend: il y a beaucoup de saveurs de SQL.

dans oracle et standard SQL, vous pouvez utiliser string1 || string2 ,

dans mysql il y a le concat (string1, string2) fonction

dans sas il y a la compresse (string1 || string2) Déclaration, qui ressemble à une combinaison de ce qui précède.

Rechercher Comment faire sur votre plate-forme ou le faire savoir lequel c'est.


0 commentaires

2
votes

Ceci ressemble à Oracle, alors essayez ceci:

select (lpad(floor(months_between(sysdate, hiringdate)/12), 2, '0') || '-' ||
        lpad(mod(floor(months_between(sysdate, hiringdate)), 12), 2, '0')
       ) as yymm


0 commentaires

0
votes

Tu pourrais faire quelque chose comme ça. Utilisation de la table code> EMP code> dans le schéma code> Scott code> pour tester.

select empno, ename, hiredate,
       to_char(floor(mths/12), 'fm99') || '-' || 
       to_char(mod(mths, 12) , 'fm00')  as yymm
from   ( 
         select empno, ename, hiredate, 
                round(months_between(sysdate, hiredate)) as mths
         from   scott.emp
       )
;
     EMPNO ENAME      HIREDATE    YYMM   
---------- ---------- ----------- -------
      7369 SMITH      17-DEC-1980 38-03  
      7499 ALLEN      20-FEB-1981 38-01  
      7521 WARD       22-FEB-1981 38-01  
      7566 JONES      02-APR-1981 38-00  
      7654 MARTIN     28-SEP-1981 37-06  
      7698 BLAKE      01-MAY-1981 37-11  
      7782 CLARK      09-JUN-1981 37-09  
      7788 SCOTT      19-APR-1987 31-11  
      7839 KING       17-NOV-1981 37-04  
      7844 TURNER     08-SEP-1981 37-06  
      7876 ADAMS      23-MAY-1987 31-10  
      7900 JAMES      03-DEC-1981 37-04  
      7902 FORD       03-DEC-1981 37-04  
      7934 MILLER     23-JAN-1982 37-02 


0 commentaires