Oracle interval '1' YEAR 今天報錯了

来源:https://www.cnblogs.com/zhangdk/archive/2020/03/03/interval.html
-Advertisement-
Play Games

Oracle interval '1' YEAR寫法,在瑞年2.29號當前會報錯,這是由於Oracle的interval電腦製造成的,替代寫法add_months(TO_DATE('2020-02-29','yyyy-MM-dd'),-12) ...


  • 2.28日,客戶微信公眾號更新賬單列表功能:業主群里反饋用戶查到的賬單記錄不是自己的,經驗證和推測是同事寫死了用戶編號。好吧!!!在家辦公,有點馬虎,表示理解吧。
  • 2.29日,星期六,懶覺還沒睡醒,業主群里反饋賬單查不到了。I'm Angry,直接把問題截圖轉發到了小組溝通群里。

轉過頭來一想,不對呀,昨天更新後是可以正常使用的呀。這家伙也不會這麼用工,加班又給更新一版。感覺不對,查日誌。

API網關日誌

賬單列表是預設載入近一年的,也沒有傳遞時間相關的信息呀,怎麼就指定的月份日期無效呢。直接在後臺執行對應SQL,還是報錯。

ORA-01839: 指定月份的日期無效
01839. 00000 -  "date not valid for month specified"

看來是SQL語句的問題,但是介面最近就沒有更新呀。最終鎖定在

sysdate - interval '1' YEAR
--當然這個問題必須是在特定日期才會出現的,比如
select TO_DATE('2020-02-29','yyyy-MM-dd') - interval '1' YEAR from dual

經網上查詢,原來這個問題是因為瑞年29號以及oracel的interval處理機製造成。

Query containing SYSDATE - INTERVAL '1' YEAR fails for today's date(29th February 2016)

這裡先說替代寫法:

select add_months(TO_DATE('2020-02-29','yyyy-MM-dd'),-12) from dual

這裡有問題的說明:

It might be disappointing, but it is to be expected. [It is mentioned in the documentation](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#i48042):
When interval calculations return a datetime value, the result must be an actual datetime value or the database returns an error. For example, the next two statements return errors:
SELECT TO_DATE('31-AUG-2004','DD-MON-YYYY') + TO_YMINTERVAL('0-1') FROM DUAL;
  SELECT TO_DATE('29-FEB-2004','DD-MON-YYYY') + TO_YMINTERVAL('1-0') FROM DUAL; 
The first fails because adding one month to a 31-day month would result in September 31, which is not a valid date. The second fails because adding one year to a date that exists only every four years is not valid. 

大概意思是:

Oracle的官方文檔中已經說了:interval計算返回一個datetime值,返回值必須是一個準確的datetime值,否則返回錯誤。

說白了,interval計算後,Oracle不會做轉換,比如第一種情況,沒有31號,不會幫你轉到次月1號;第二種情況,沒有29號,不會幫你轉到次月1號或本月20號。因為這樣不准確。

最後感嘆一下,自己遇到了破解了一個4年一遇的bug!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ntpdate 系統時間、hwclock 硬體時間1、判斷當前時間是否準確[root@Ecology-APP ~]# date2020年 03月 03日 星期二 10:13:02 CST 2、檢查是否安裝ntpdate[root@Ecology-APP ~]# ntpdate-bash: ntpda ...
  • 字元串按位置切片 ${var:offset:length} offset:從第幾個開始切 length:切多長。可以是負數(從最右面開始切多長,註意負號和冒號之間必須有空格)。 字元串模式 模式: :代表0個或多個任意字元。 ?:代表0個或1個任意字元。 字元串按模式切片(只能從行首或行尾開始切,不 ...
  • i.MXRT1010的市場定位類似於傳統8位MCU或入門級32位MCU,它跟i.MXRT1015/1020/1050一樣內部只集成了一個雙通道8bit的FlexSPI模塊,從低成本開發角度考慮外掛的晶元應該越少越好,因此本文主要介紹單Flash連接,不再像前面幾款i.MXRT晶元那樣去額外介紹雙Fl... ...
  • Windows歷年高危漏洞介紹和分析 一、漏洞介紹: 1.漏洞: <1>.漏洞:是影響網路安全的重要因素; <2>.漏洞利用:成為惡意攻擊的最常用手段; <3>.漏洞攻擊:產業化、低成本化、手段多樣化、低門檻趨勢; <4>.信息化時代:無論個人/企業,都面臨嚴峻的漏洞威脅; <5>.Windows、 ...
  • Redis做為單機緩存使用建議 前言 由於原來項目使用的緩存中間件無法在國產麒麟操作系統裡面使用,準備在項目中引入redis做為單機緩存。 配置優化建議 配置redis服務以守護進程啟動 Redis預設不是以守護進程的方式運行,可以通過將配置項daemonize修改為yes,這樣啟動redis-se ...
  • 上一篇文章 "ElasticSearch 術語" 中提到了倒排索引,那麼這篇文章就來講解下什麼是倒排索引,倒排索引的數據結構以及 ElasticSearch 中的倒排索引。 倒排索引 倒排索引(Inverted Index) 也常被稱為反向索引,是搜索引擎中非常重要的數據結構,為什麼說它重要呢,我們 ...
  • 安裝 使用命令行安裝,會自動管理依賴(推薦): 安裝包安裝: 1. 以管理員身份安裝64位的 "Erlang" 。 2. 下載並安裝 RabbitMQ 服務。 "下載地址" 。 3. RabbitMQ 會作為 Windows 服務安裝並預設啟動。 4. 可以在開始菜單中啟動或者停止 RabbitMQ ...
  • 1 --預設引擎:INNODB支持事務處理、外鍵和行級鎖 2 3 --mysql -uroot -p 4 --登錄資料庫 5 6 SHOW DATABASES; 7 --查看資料庫列表 8 9 SELECT NOW(); 10 --查看當前時間 11 12 SELECT VERSION(); 13 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...