Literal与字符串列上的Oracle SQL to_date的格式字符串不匹配
发布时间:2021-04-01 10:46:30 所属栏目:站长百科 来源:网络整理
导读:亲爱的来自Stack Overflow的SQL专家: 环境:Oracle 我试图理解为什么我不能对包含字符串的表列进行to_date选择.注意下面示例中带有名称值Value的tableZ包含一串字符串,其中一些是正确的格式,例如6/20/2010 00:00:00. tableZ | Value || __________________
亲爱的来自Stack Overflow的SQL专家: 环境:Oracle 我试图理解为什么我不能对包含字符串的表列进行to_date选择.注意下面示例中带有名称值Value的tableZ包含一串字符串,其中一些是正确的格式,例如6/20/2010 00:00:00. tableZ | Value | | __________________ | | 6/21/2010 00:00:00 | | Somestring | | Some Other strings | | 6/21/2010 00:00:00 | | 6/22/2010 00:00:00 | 以下作品 SELECT To_Date(c.Value,'MM/DD/YYYY HH24:MI:SS') somedate FROM tableX a,tableY b,tableZ c WHERE Lower(a.name) = 'somedate' AND a.id = b.other_id AND b.id = c.new_id 这会返回类似的内容(这很好): | somedate | | __________________ | | 21.06.2010 00:00:00 | | 21.06.2010 00:00:00 | | 22.06.2010 00:00:00 | 以下不起作用 SELECT To_Date(c.Value,'MM/DD/YYYY HH24:MI:SS') somedate FROM properties$aud a,template_properties$aud b,consumable_properties$aud c WHERE Lower(a.name) = 'somedate' AND a.id = b.property_id AND b.id = c.template_property_id AND To_Date(c.Value,'MM/DD/YYYY HH24:MI:SS') IS NOT NULL 回来: ORA-01861:文字与格式字符串不匹配 我在这里错过了什么?快速说明: ... AND b.id = c.template_property_id AND To_Date(c.Value,'DD.MM.YYYY HH24:MI:SS') IS NOT NULL 也不起作用. 谢谢!! 目标是能够在c.value上对BETWEEN查询日期以选择日期范围. 解决方法Oracle评估where子句中找到的条件的顺序不固定.也就是说,它可以选择在其他条件之前评估包含TO_DATE的条件,在这种情况下查询将失败.为了防止这种情况,请将ordered_predicates提示添加到查询中,但请注意,这可能需要额外的手动调整以提高性能.SELECT /*+ ordered_predicates */ To_Date(c.Value,'MM/DD/YYYY HH24:MI:SS') IS NOT NULL 显然,ordered_predicates从10g开始不推荐使用.在这种情况下,我认为您唯一的选择是使用子查询,以便优化器首先被强制评估它(即它不能组合查询).最简单的方法是将rownum放在内部查询的where语句中. SELECT To_Date(c.Value,'MM/DD/YYYY HH24:MI:SS') somedate FROM (SELECT value FROM properties$aud a,consumable_properties$aud c WHERE Lower(a.name) = 'somedate' AND a.id = b.property_id AND b.id = c.template_property_id AND rownum > 0) WHERE To_Date(c.Value,'MM/DD/YYYY HH24:MI:SS') IS NOT NULL (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |