2016-03-03 55 views
0

我正在寫一個sql查詢,我需要將varchar列值轉換爲日期,並在where子句中使用它。錯誤比較日期在oracle sql查詢

以下是我正在嘗試的查詢;

SELECT * 
FROM 
    (SELECT DISTINCT t1.record_id, 
    t1.column_name, 
    t1.value, 
    t1.row_index, 
    t1.start_date, 
    t1.end_date, 
    t2.value AS val 
    FROM sf_monthly_fin_exp t1, 
    sf_monthly_fin_exp t2 
    WHERE t1.row_index   = t2.row_index 
    AND t1.generated_report_id = t2.generated_report_id 
    AND t1.generated_report_id =11700 
    AND t2.column_name   = 'Date' 
    AND t2.value    <> 'Total' 
    AND t1.column_name = 'xyz' 
    ORDER BY t1.row_index 
) 
WHERE TO_DATE(val, 'dd/mm/YYYY') = TO_DATE('05/01/2014', 'dd/mm/YYYY'); 

我將值轉換爲日期類型,而比較它卻給我以下錯誤;

ORA-01858: a non-numeric character was found where a numeric was expected 
01858. 00000 - a non-numeric character was found where a numeric was  expected. 

我在做什麼錯誤的查詢,任何幫助將不勝感激。

enter image description here

+2

但是,爲什麼你存儲日期varchar列? – jarlh

+0

提供樣本數據。你應該首先解決你的設計問題。將日期存儲爲字符串是非常糟糕的設計。使用適當的數據類型。 –

+0

這個表是一種鍵值對,它存儲了許多種類的值之一是Date,其中列名是Date,值是某個日期值存儲爲varcher。 – varun

回答

0

你試試 「t2.value」 轉換爲日期。也許你想轉換「t1.value」:

WHERE TO_DATE(value, 'dd/mm/YYYY') = TO_DATE('05/01/2014', 'dd/mm/YYYY');