[英]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;
您可以使用TRUNC
和MOD
功能如下:
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.