我有一个表,其中包含一个名称中包含德语变音符号的列。是的,我知道这是一个绝对糟糕的主意,但我没有创建表,绝对不能改变它,所以我必须以某种方式处理它。
我的问题是,当我在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数据库上。
答案 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';
我认为你只是存在隐式数据收敛的问题。