最近遇到一個小問題,在這里記錄一下。
問題描述
有一條查詢語句,大致如下:
1 select * from table where create_date = '2020-04-12' and status = '10' with ur
當使用數據庫工具AQT進行查詢時,可以正確查到數據。但通過遠程SSH連接數據庫進行查詢時,卻怎么都查不到。
原因分析
通過對條件進行分析(實際條件要比上例復雜),定位到大概率是日期格式問題。於是分別在AQT和SSH客戶端執行以下語句:
1 select create_date from table where status = '10' with ur
果然,AQT的數據格式是這樣的 yyyy-MM-dd ,而在SSH是這樣的 MM/dd/yyyy 。 create_date 是DATE類型的數據列。
通過分析后了解到,常用的數據庫工具一般在處理和展示日期類型的數據時,會自動進行格式轉換,也算是幫用戶封裝具體細節,減少對數據列的細節的了解。
不過在這地方相當於好心辦了壞事。修改查詢語句如下:
1 select * from table where create_date = date('2020-04-12') and status = '10' with ur
通過在sql語句中先轉換成日期格式,避免在不同環境下執行的效果不一樣。