我不确定我在这里做错了什么。我正在尝试构建一个oracle查询,我将通过oci从我的php项目执行。我需要选择特定日期范围之间的所有记录。
在尝试降低语法时,我写出了这个测试查询:
SELECT * FROM SHIPPED
WHERE user_seq_id = 381 AND
LOT_DATE BETWEEN TO_DATE('05/27/2014', 'MM/DD/YYYY')
AND TO_DATE('06/03/2014','MM/DD/YYYY');
这种语法看起来应该可行,但事实并非如此。我绝对不是一个oracle开发者,所以我很肯定我误解了一些东西。当我看到类似的帖子时,我没有找到任何可以指出我做错的事情。
答案 0 :(得分:2)
这是一个相当棘手的错误。如果将LOT_DATE
存储为字符串而不是日期,则会出现此问题 - 该字符串包含无效数据。
通过将比较的右侧显式转换为日期,可以通过将字段转换为日期来尝试比较。并且有一个错误。
修复方法是修复字段中的数据。如果某个东西在一个名为“date”的字段中,那么它应该有一个日期数据类型。
答案 1 :(得分:0)
为了识别日期不支持的字符串值 - 您可以创建一个接受字符串并验证正确日期格式的PL / SQL函数,函数示例:
CREATE OR REPLACE FUNCTION VERIFY_DATE(v_date IN VARCHAR2) RETURN NUMBER IS
v_date1 DATE;
BEGIN
select to_date(v_date) into v_date1 from dual;
RETURN 1;
Exception WHEN Others THEN
RETURN 0;
END;
现在,确定具有无效字符串值的行,您应该更正这些行以运行查询:
select * from
(
select VERIFY_DATE(LOT_DATE) DateVerified,s.* from SHIPPED s
)
where
DateVerified=0