2014-05-04 31 views
0

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 
+0

你錯過了一個'''在你的查詢中 – EmCo

+0

ya它的輸入錯誤 – zak

+0

對於第一個錯誤,你沒有顯示你使用的表名或爲什麼你認爲它存在;你可能引用了混合大小寫對象名稱?第二,你應該指定你的日期格式,但是因爲它沒有錯誤,所以列上的值是否有一個時間組件? –

回答

2

使用日期文字來代替:

select * from Table_name where VHFDATE= DATE '2014-05-30'; 

或者,如果正在從一個UI或者從其他地方提供的日期值,使用綁定變量:

select * from Table_name where VHFDATE= :in_vhf_date; 
0

這些可能是導致這些錯誤的一些原因。

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; 
+0

最好使用日期文字,就像Jeffrey Kemp的回答一樣。並不總是一個有效的月份縮寫 –

+0

這取決於您的要求我已編輯我的答案謝謝 –

+1

我認爲jonearles意味着它不是每種語言中有效的月份縮寫,所以如果使用「MAR」(或「Mar」 'Mon')並不安全,因爲客戶端可能不會使用英語。您可以使用可選的'nlsparam'參數來覆蓋它,但它很簡單儘可能避免它。您還將已經是一個日期('date_column')的內容轉換爲另一個日期,然後與字符串進行比較,該字符串仍然會執行多個隱式日期轉換。也許你打算使用'to_char';但最好將字符串轉換爲日期進行比較,以便仍然可以使用索引。 –

3

爲@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'); 

這隻會比較日期分數,並給予你取決於那個結果。

乾杯!