我正在嘗試對日期格式為 DD-MMM-YYYY 的列進行大小寫。
基本上,我正在嘗試將日期轉換為會計年度列,以更好地分析作業資料。由于隱私問題,我無法在此處分享實際資料。下面是我的語法。
我得到 ORA-00932:不一致的資料型別:預期 DATE 得到 CHAR。
TRAVEL_DT 列是 DATE 資料型別。
Select Lst_name, frst_nm, travel_date,
case when TRAVEL_DT <= '30-SEP-2020' THEN 'FY-2019'
WHEN TRAVEL_DT >= '01-OCT-2020' THEN 'FY-2020'
ELSE TRAVEL_DT
END AS FISCAL_YEAR
FROM TRAVEL_DATA
uj5u.com熱心網友回復:
問題是您case回傳when子句中的文本和else. 嘗試這個:
Select Lst_name, frst_nm, travel_date,
case when TRAVEL_DT <= '30-SEP-2020' THEN 'FY-2019'
WHEN TRAVEL_DT >= '01-OCT-2020' THEN 'FY-2020'
ELSE to_char(TRAVEL_DT)
END AS FISCAL_YEAR
FROM TRAVEL_DATA
uj5u.com熱心網友回復:
要獲取財政年度開始的日期,您可以:
- 減去 9 個月;
- 截斷到年初;然后
- 再增加9個月
如果您只想知道財政年度,那么:
- 減去 9 個月;
- 提取年份。
像這樣:
Select Lst_name,
frst_nm,
travel_dt,
'FY-' || EXTRACT(YEAR FROM ADD_MONTHS(travel_dt, -9)) AS fiscal_year,
ADD_MONTHS(TRUNC(ADD_MONTHS(travel_dt,-9),'YY'),9) AS start_of_fiscal_year
FROM TRAVEL_DATA
其中,對于樣本資料:
CREATE TABLE travel_data (lst_name, frst_nm, travel_dt) AS
SELECT 'Abbot', 'Alice', DATE '2020-09-30' FROM DUAL UNION ALL
SELECT 'Baron', 'Betty', DATE '2020-10-01' FROM DUAL UNION ALL
SELECT 'Curry', 'Carol', DATE '2019-10-01' FROM DUAL UNION ALL
SELECT 'Doyle', 'Doris', DATE '2021-09-30' FROM DUAL UNION ALL
SELECT 'Eagle', 'Emily', DATE '2021-10-01' FROM DUAL
輸出:
LST_NAME FRST_NM TRAVEL_DT 財政年度 START_OF_FISCAL_YEAR 方丈 愛麗絲 2020-09-30 00:00:00 2019財年 2019-10-01 00:00:00 男爵 貝蒂 2020-10-01 00:00:00 2020財年 2020-10-01 00:00:00 咖喱 頌歌 2019-10-01 00:00:00 2019財年 2019-10-01 00:00:00 道爾 多麗絲 2021-09-30 00:00:00 2020財年 2020-10-01 00:00:00 鷹 艾米麗 2021-10-01 00:00:00 2021財年 2021-10-01 00:00:00
如果您只想修復代碼,則可以使用日期文字:
Select Lst_name,
frst_nm,
travel_dt,
CASE
WHEN TRAVEL_DT < DATE '2020-10-01' THEN 'FY-2019'
WHEN TRAVEL_DT >= DATE '2020-10-01' THEN 'FY-2020'
END AS FISCAL_YEAR
FROM TRAVEL_DATA
Note: You do not need the ELSE condition as it will only ever be matched when TRAVEL_DT is NULL.
db<>fiddle here
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426875.html
