查询表与德国变形金刚在列名称

时间:2014-02-20 14:17:36

标签: sql oracle

我有一个表,其中包含一个名称中包含德语变音符号的列。是的,我知道这是一个绝对糟糕的主意,但我没有创建表,绝对不能改变它,所以我必须以某种方式处理它。

我的问题是,当我在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子句的查询,我可以看到有一些。

谷歌在这个主题上并没有真正的帮助,所以有谁知道如何解决这个问题?

带有变音符号的列是日期类型,如果这是某种相关的。 我在Oracle 10g数据库上。

3 个答案:

答案 0 :(得分: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',因此默认情况下它只会显示日期部分。但是,永远不要依赖隐式日期转换。

答案 1 :(得分: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';

答案 2 :(得分:0)

尝试使用此

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

我认为你只是存在隐式数据收敛的问题。