格式化计算数据

时间:2019-03-22 13:48:05

标签: sql oracle

我正在尝试使用yy-mm这样的格式来格式化年和月

我可以这样计算得出我的年份值:

ROUND(months_between(sysdate,hiringdate)/12)

获得月份值:

ROUND(months_between(sysdate,hiringdate))

我只是不知道如何将这2种形式组合为yy-mm格式

4 个答案:

答案 0 :(得分:2)

这看起来像Oracle,因此请尝试以下操作:

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

答案 1 :(得分:0)

这取决于:有许多种SQL。

在Oracle和标准SQL中,您可以使用string1 || string2

在MySQL中,有CONCAT(string1, string2)函数

在SAS中有一个COMPRESS(string1 || string2)语句,看起来像上面的组合。

搜索如何在您的平台上执行此操作,或者让它知道它是哪个。

答案 2 :(得分:0)

您可以执行以下操作。使用EMP模式中的SCOTT表进行测试。

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 

答案 3 :(得分:-1)

大概有一百万种方法可以做到这一点。其中之一是这个:

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