2014-02-20 26 views
2

我有一個表,其中包含一個名稱中帶有德語變音符的列。是的,我知道這是一個絕對不好的想法,但我沒有創建表格,絕對不能改變它,所以我必須以某種方式處理它。帶有德語變音符的查詢表列名

我的問題是,當我在WHERE子句中使用此列時,我的查詢似乎不起作用。

當我執行以下查詢:

SELECT t.BadUmlautColumnÄ5 
FROM myTable t; 

一切工作正常。

但是,當我執行這個查詢:

SELECT t.BadUmlautColumnÄ5 
FROM myTable t 
WHERE t.BadUmlautColumnÄ5 = '20.02.2014' 

我只是得到一個空的結果集。沒有錯誤,但沒有結果。

我也試過:

WHERE t."BADUMLAUTCOLUMNÄ5" = '20.02.2014' 

但它的完全一樣。

而且我知道我在where子句中使用的值有條目,因爲對於沒有where子句的查詢,我可以看到有一些條目。

Google對這個主題沒有真正的幫助,所以有人知道如何解決這個問題嗎?

帶有變音符的列的類型是日期,如果這有點相關。 而我正在使用Oracle 10g數據庫。

+0

爲什麼你想運行這個查詢? – Alexander

+0

當然,我想運行一個更加複雜和有意義的查詢,但它生成了一個emptry結果集,並且我能夠將其分解到這個查詢中,該查詢也不會產生結果集 – nurgan

+0

,正如前面提到的類型date一樣,查詢與另一列(不包含元音變音)產生正確的結果,我已經嘗試過TO_DATE沒有區別 – nurgan

回答

3

這是無關的列名。它看起來像列中的值有一個時間分量。您可以查詢整個一天:

WHERE TRUNC(t.BadUmlautColumnÄ5) = TO_DATE('20.02.2014', 'DD.MM.YYYY') 

但如果列被編倒不如做的其他方式:

SELECT TO_CHAR(t.BadUmlautColumnÄ5, 'DD.MM.YYYY HH24:MI:SS') 
FROM myTable t 
WHERE t.BadUmlautColumnÄ5 >= 
    TO_DATE('20.02.2014 00:00:00', 'DD.MM.YYYY HH24:MI:SS') 
AND t.BadUmlautColumnÄ5 <= 
    TO_DATE('20.02.2014 23:59:59', 'DD.MM.YYYY HH24:MI:SS') 

假設它是一個DATE,不是TIMESTAMP 。我已經指定了顯示格式,您應該始終這樣做,以包含時間,以便您可以在其中實際顯示。它看起來像你的NLS_DATE_FORMAT'DD.MM.YYYY'所以它只會默認顯示日期部分。不過,不要依賴隱式日期轉換。

+0

這可行。但它奇怪的,因爲當我只是「從myTable t選擇t.BadUmlautColumnÄ5」,在結果集我看不到任何時間組件...是的,這是日期。你能解釋一下嗎?但無論如何,thx – nurgan

+0

好,你已經在你的編輯中解釋過了 – nurgan

0

嘗試使用此

SELECT t.BadUmlautColumnÄ5 
FROM myTable t 
WHERE t.BADUMLAUTCOLUMNÄ5 = date '2014-02-20'; 

我認爲你只是有隱式數據convercions的問題。

+0

仍然,smae問題... – nurgan

1

試一下

SELECT t.BadUmlautColumnÄ5 
FROM myTable t 
WHERE t.BadUmlautColumnÄ5 = TO_DATE('20.02.2014', 'dd.mm.yyyy');

如果行不通 -

 
SELECT t.BadUmlautColumnÄ5 
FROM myTable t 
WHERE t.BadUmlautColumnÄ5 = TO_TIMESTAMP ('20.02.2014', 'dd.mm.yyyy'); 

您也可以嘗試

 
SELECT t.BadUmlautColumnÄ5 
FROM myTable t 
WHERE to_char(t.BadUmlautColumnÄ5, 'dd.mm.yyyy') = '20.02.2014'; 
+0

在這種情況下,第一和第二的區別是什麼? :) – smnbbrv

+0

不,絕對相同,產生一個空的結果集...與to_date和to_timestamp – nurgan

+0

不同的格式。我現在無法訪問數據庫,因此我無法檢查這些數據類型是否適用於任何數據類型。 – Alexander