任何人都可以幫我糾正以下從SQL server到 的轉換Oracle嗎?
- 我只需要從下面的減法中得到月份值“MM”。datediff(month, date1, date2) --> SUBTR(TO_NUMBER(date2- date1),6,7);
- 我需要來自以下結果的 'YYYYMM' 值,但系統顯示 'ORA-00904: "MM": invalid identifier' 。CONVERT(varchar, YEAR(date1)) format(date1, 'MM') --> TO_CHAR(i.ordr_clsd_dt,YYYY) TO_CHAR(i.ordr_clsd_dt,MM)
date1并且date2都是date型別資料。
uj5u.com熱心網友回復:
檢查函式MONTHS_BETWEEN
當你有兩個日期之間的月數時,你只需要一些格式。您可以使用月份的數值,或轉換為一個INTERVAL YEAR TO MONTH值
WITH t AS
(SELECT DATE '2020-08-01' date1, DATE '2021-11-01' date2 FROM dual),
mb AS
(SELECT date1, date2, MONTHS_BETWEEN(date2, date1) AS MONTHSBETWEEN FROM t)
SELECT date1, date2, MONTHSBETWEEN,
LPAD(TRUNC(MONTHSBETWEEN/12), 4, '0') || LPAD(MOD(MONTHSBETWEEN, 12), 2, '0'),
NUMTOYMINTERVAL(MONTHSBETWEEN, 'MONTH'),
LPAD(EXTRACT(YEAR FROM NUMTOYMINTERVAL(MONTHSBETWEEN, 'MONTH')) , 4, '0') || LPAD(EXTRACT(MONTH FROM NUMTOYMINTERVAL(MONTHSBETWEEN, 'MONTH')), 2, '0')
FROM mb;
uj5u.com熱心網友回復:
在 Oracle 中,您可以簡單地減去兩個日期并得到天數的差值。
SELECT TO_DATE('2021-11-02', 'YYYY-MM-DD') -
TO_DATE('2021-10-31', 'YYYY-MM-DD') AS DateDiff
FROM dual
DATEDIFF
2
uj5u.com熱心網友回復:
雖然 Wernfrieds 解決方案更加完整并顯示附加資訊,但您可以使用我在下面顯示的以下查詢獲得簡化的輸出。
注意: Months_between 可以回傳一個分數。為了洗掉分數,我使用了 trunc 命令。
SELECT trunc (Months_between(To_date('2021103', 'YYYYMMDD'),
To_date('20210401', 'YYYYMMDD')))
num_months
FROM dual;
NUM_MONTHS
6
uj5u.com熱心網友回復:
用月份計算總是很特別的,因為月份有不同的長度。讓我們看看 SQL Server 在這里做了什么:
select datediff(month, '20210131', '20210201');
=> 1
SQL Server 忽略了這只是一天。這些日子在兩個不同的相鄰月份,所以答案是 1 個月的差異。
MONTHS_BETWEEN另一方面,Oracle試圖計算月份分數的確切差異:
select months_between(date '2021-02-01', date '2021-01-31') from dual;
=> 0.032258
如果我只想查看 Oracle 中的月份,我會使用一些簡單的計算,例如:
select
(extract(year from date2) * 12 extract(month from date2)) -
(extract(year from date1) * 12 extract(month from date1))
from dates;
至于你的第二個問題:你想要YYYYMM,所以使用'YYYYMM'格式。格式是字串文字,因此我們需要單引號。如果沒有它們,Oracle 會認為這應該是一個列名。這就是 Oracle 告訴您在查詢中使用無效識別符號的原因,因為該列mm不存在。
TO_CHAR(i.ordr_clsd_dt, 'yyyymm')
或作為數值:
TO_NUMBER(TO_CHAR(i.ordr_clsd_dt, 'yyyymm'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349313.html
標籤:sql sql-server 甲骨文
上一篇:如果id相同,則聯合替換行
下一篇:將日期時間提高到人類可讀的水平
