簡體   English   中英

如何在sql查詢中將年和月顯示為1Y2M

[英]how to display year and month as 1Y2M in sql query

我有一個查詢來檢索兩個日期之間的月數 -

select Trunc(Months_between(Trunc(SYSDATE), CUR_EFF_DATE ) / 12, 1) 
from xyz

現在這個查詢返回數據,如 - 0.1、1.5 等。我希望查詢給出諸如 1yr 2 個月、1 個月等結果。如何實現?

我會通過文檔

間隔數據類型沒有格式模型。 因此,要調整它們的呈現方式,您必須結合EXTRACT等字符函數並連接組件。

下面是一個示例,它看起來很像您的用例,可以按如下方式進行調整:

select 
    extract(year from (sysdate - cur_eff_date) year to month)
    || ' year(s) '
    || extract(month from (sysdate - cur_eff_date) year to month)
    || ' month(s)' 
    as date_diff
from xyz

我們可以嘗試使用除法和模數計算年份和月份,然后以您想要的方式顯示輸出。

WITH cte AS (
    SELECT TRUNC(MONTHS_BETWEEN(TRUNC(SYSDATE), CUR_EFF_DATE) / 12, 1) AS num_months
    FROM xyz
)

SELECT
    TO_CHAR(FLOOR(num_months / 12)) || 'Y' ||
        TO_CHAR(MOD(num_months, 12)) || 'M' AS output
FROM cte;

您可以使用TRUNCMOD功能如下:

SELECT TRUNC(MONS/12) || 'Y' || MOD(MONS,12) || 'M' 
FROM
(SELECT MONTHS_BETWEEN(TRUNC(SYSDATE), CUR_EFF_DATE) MONS
FROM XYZ)

干杯!!

默認情況下會進行字符轉換,您不應在 num_months 計算中除以 12:

WITH cte AS (
    SELECT TRUNC(MONTHS_BETWEEN(SYSDATE+365,SYSDATE),0) AS num_months
    FROM dual
)

SELECT
    FLOOR(num_months/12) || 'Y' || MOD(num_months, 12) || 'M' AS output
FROM cte;

希望這可以幫助。

Oracle 具有INTERVAL YEAR TO MONTH數據類型,您可以使用它:

select (sysdate - cur_eff_date) year to month as diff from xyz

數據庫小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM