IAM編寫SQL查詢在Oracle數據庫中,但也有表的名稱存在,但也有錯誤的Oracle resualts那表或視圖中找不到與Oracle數據庫日期類型選擇查詢
說的IAM寫這個查詢的另一個問題
select * from Table_name where DDATE="30-05-2014;
but id doesn't return anything how to write where with date type
IAM編寫SQL查詢在Oracle數據庫中,但也有表的名稱存在,但也有錯誤的Oracle resualts那表或視圖中找不到與Oracle數據庫日期類型選擇查詢
說的IAM寫這個查詢的另一個問題
select * from Table_name where DDATE="30-05-2014;
but id doesn't return anything how to write where with date type
使用日期文字來代替:
select * from Table_name where VHFDATE= DATE '2014-05-30';
或者,如果正在從一個UI或者從其他地方提供的日期值,使用綁定變量:
select * from Table_name where VHFDATE= :in_vhf_date;
這些可能是導致這些錯誤的一些原因。
1)如果您得到一個表或視圖不存在的錯誤,這意味着您可能沒有足夠的特權在該表上。
2)使用的日期格式等TO_DATE()爲日期數據類型。
select * from your_table where to_date(date_column,'DD-MON-YYYY')='30-MAR-2012';
3)檢查您是否有該特定日期的數據。您可以使用簡單的GROUP BY來檢查該數據的記錄數。
select count(*),date_column from your_table group by date_column order by date_column desc;
最好使用日期文字,就像Jeffrey Kemp的回答一樣。並不總是一個有效的月份縮寫 –
這取決於您的要求我已編輯我的答案謝謝 –
我認爲jonearles意味着它不是每種語言中有效的月份縮寫,所以如果使用「MAR」(或「Mar」 'Mon')並不安全,因爲客戶端可能不會使用英語。您可以使用可選的'nlsparam'參數來覆蓋它,但它很簡單儘可能避免它。您還將已經是一個日期('date_column')的內容轉換爲另一個日期,然後與字符串進行比較,該字符串仍然會執行多個隱式日期轉換。也許你打算使用'to_char';但最好將字符串轉換爲日期進行比較,以便仍然可以使用索引。 –
爲@Alex普爾說..使用TO_DATE()函數爲:
select * from your_table where date_column = TO_DATE('01/01/2014' , 'dd/mm/yyyy');
但要確保你的 「date_column」 DATE類型列。
還有一點要考慮的是,如果列中包含的時間太長(例如:2012年11月30日上午10點00分00秒),使用
select * from your_table where TRUNC(date_column) = TO_DATE('01/01/2014' , 'dd/mm/yyyy');
這隻會比較日期分數,並給予你取決於那個結果。
乾杯!
你錯過了一個'''在你的查詢中 – EmCo
ya它的輸入錯誤 – zak
對於第一個錯誤,你沒有顯示你使用的表名或爲什麼你認爲它存在;你可能引用了混合大小寫對象名稱?第二,你應該指定你的日期格式,但是因爲它沒有錯誤,所以列上的值是否有一個時間組件? –