回答
select trunc(date '2016-11-22', 'month') + 25
from dual;
trunc(date '2016-11-22', 'month')
將返回第一個月份,T他+ 25
然後將添加所需的25天。
如果第二個參數的含義依賴於「比較」的日期,你可以做這樣的事情:
select case
when extract(day from date '2016-11-22') >= 25 then
add_months(trunc(date '2016-11-22', 'month'), 1) + 25
else trunc(date '2016-11-22', 'month') + 25
end as next_date
from dual;
當然,你將取代硬編碼值的日期和天的「數」包含變量或列值。
這個例子:
with sample_data (the_date, num_days) as (
select date '2016-11-22', 25 from dual union all
select date ' 2016-11-26', 22 from dual union all
select date ' 2016-11-26', 3 from dual
)
select the_date, num_days,
case
when extract(day from the_date) >= num_days then
add_months(trunc(the_date, 'month'), 1) + num_days - 1
else trunc(the_date, 'month') + num_days - 1
end as next_date
from sample_data;
將返回:
THE_DATE | NUM_DAYS | NEXT_DATE
------------+----------+------------
2016-11-22 | 25 | 2016-11-25
2016-11-26 | 22 | 2016-12-22
2016-11-26 | 3 | 2016-12-03
這將產生12月25日的問題樣本數據。 –
是的,但正如已經注意到的那樣,問題並不十分清楚。 –
您可以使用此
WITH tmp AS
(
SELECT TO_DATE('22/11/2016', 'DD/MM/YYYY') date_col FROM DUAL
)
SELECT
CASE WHEN TO_CHAR(date_col,'DD') > '25'
THEN TO_DATE('25' || TO_CHAR(ADD_MONTHS(date_col, 1), '/MM/yyyy'), 'DD/MM/YYYY')
ELSE TO_DATE('25' || TO_CHAR(date_col, '/MM/yyyy'), 'DD/MM/YYYY') END date_col_new
FROM tmp;
如果輸入(25)號,你可以使用TO_CHAR(your_input)
代替'25'
它可以解決你的問題:
select
(
case
when trunc (:yourdate-trunc(:yourdate,'month'))+1 <:urNum then
trunc(:yourdate,'month')+:urNum-1
else
trunc(last_day(:yourdate))+:urNum
end)
from dual;
這裏有一個方式:
WITH dates AS (SELECT to_date('30/11/2015', 'dd/mm/yyyy') dt FROM dual UNION ALL
SELECT to_date('03/11/2015', 'dd/mm/yyyy') dt FROM dual UNION ALL
SELECT to_date('31/10/2015', 'dd/mm/yyyy') dt FROM dual UNION ALL
SELECT to_date('29/11/2015', 'dd/mm/yyyy') dt FROM dual UNION ALL
SELECT to_date('31/01/2016', 'dd/mm/yyyy') dt FROM dual),
dom AS (SELECT 25 day_of_month FROM dual UNION ALL
SELECT 31 day_of_month FROM dual UNION ALL
SELECT 30 day_of_month FROM dual UNION ALL
SELECT 03 day_of_month FROM dual UNION ALL
SELECT 01 day_of_month FROM dual),
res AS (SELECT dates.dt starting_dt,
dom.day_of_month,
add_months(TRUNC(dates.dt, 'mm'),
CASE WHEN to_char(dates.dt, 'dd') >= dom.day_of_month
THEN 1
ELSE 0
END) month_of_end_dt
FROM dates
CROSS JOIN dom)
SELECT starting_dt,
day_of_month,
month_of_end_dt + least(day_of_month, to_number(to_char(last_day(month_of_end_dt), 'dd'))) - 1 next_date
FROM res
ORDER BY starting_dt, day_of_month;
STARTING_DATE DAY_OF_MONTH NEXT_DATE
------------- ------------ ----------
31/10/2015 1 01/11/2015
31/10/2015 3 03/11/2015
31/10/2015 25 25/11/2015
31/10/2015 30 30/11/2015
31/10/2015 31 30/11/2015
03/11/2015 1 01/12/2015
03/11/2015 3 03/12/2015
03/11/2015 25 25/11/2015
03/11/2015 30 30/11/2015
03/11/2015 31 30/11/2015
29/11/2015 1 01/12/2015
29/11/2015 3 03/12/2015
29/11/2015 25 25/12/2015
29/11/2015 30 30/11/2015
29/11/2015 31 30/11/2015
30/11/2015 1 01/12/2015
30/11/2015 3 03/12/2015
30/11/2015 25 25/12/2015
30/11/2015 30 30/12/2015
30/11/2015 31 30/11/2015
31/01/2016 1 01/02/2016
31/01/2016 3 03/02/2016
31/01/2016 25 25/02/2016
31/01/2016 30 29/02/2016
31/01/2016 31 29/02/2016
這是做什麼的,它首先通過比較你之後的日子和被比較的日期來發現新的日期。 (例如,如果您想要到達的日期的日期已經超過開始日期的那一天,則在該月份中添加一個,否則不添加任何內容)。
一旦你有了這個,這是一個簡單的事情,你可以添加你試圖去的天數。
我假設如果月份沒有完整的天數(例如,二月,四月,六月,九月,十一月),那麼你會希望無論那個月的最後一天是什麼。
因此,我們會選取較低者 - 月份的最後一天或您想要到達的那一天。我們必須從該結果中減去一個,因爲我們希望將該月的第一個包括在計數中。
- 1. 發現我們每月的第N天在SQL Server 2005
- 2. Ruby:在兩個日期之間發生的月份特定日期(例如,每月的第一天)的次數
- 3. 如何讓每個月的第二個星期天在兩個日期之間?
- 4. 如何將日期定位到該月的第一個日期?
- 5. 如何在現有日期之前插入日期爲1個月的日期?
- 6. Java:我如何得到一個月中x天的日期(例如2012年2月的第三個星期一)
- 7. python:如何將「x天前」或「x月前」轉換爲日期?
- 8. 今天之後的本月的日期
- 9. 找到第三個星期日每個月給兩個日期之間
- 10. 如何獲得目標c中每個月的第n個星期日日期?
- 11. 如何選擇每個月的每月最大日期行
- 12. 日期篩選不適用於每月的第一個月
- 13. 如何在一年的第y個月找到第x天的日期?
- 14. 熊貓發現月份列表的日期之間的計數
- 15. 如何在固定日期之後遞增每個月的整數?
- 16. Javascript:查找兩個日期之間每個月的第一個和最後一個日期?
- 17. 每個第三個元素都應該在它旁邊有一個日期
- 18. 從日期集合中選擇每個月的最後日期
- 19. MySQL從日期列中獲取每個月的最後日期
- 20. JSP中的表格 - 在每篇文章旁邊添加日期
- 21. 如何比較每月按日期()
- 22. 如果日期在當前月份之前,則將日期轉換爲當前月份的第一個
- 23. Javascript月和日期之間的日期
- 24. 如何繼續2列HTML表格出現在第x行旁邊?
- 25. 選擇當月截止日期之後的所有日期
- 26. 計算兩個日期之間的月份,然後計算每個月的日期
- 27. 如何覆蓋日期到月的第一月php strtotime和日期
- 28. PHP - 如何計算特定日期之後的月份數
- 29. PHP:發現日期是否在本月的最後一週
- 30. 將左邊任意日期的兩張表加入右邊月底日期
但是如果我的日期是2016年11月22日,我想要下個月的第三個月(03/12/2016)? – Zedfax
不是正確的答案。如果輸入是2016-11-26,則輸出應該是2016-12-25。 Zedfax - 請驗證。 – Ubercool
看起來像你的日期'22/11/2016'是固定的,你想要的所有日期之後,那裏就不可能有通用的解決方案。您需要扭轉並將您的查詢變爲您想要的日期 – XING