【问题标题】:Logical operator sql query going weirdly wrong逻辑运算符 sql 查询异常错误
【发布时间】:2012-05-15 14:58:04
【问题描述】:

我正在尝试通过提供日期范围从我的 sqlite 数据库中获取结果。 我已经能够通过提供 3 个过滤器来获取结果

        1. Name (textfield1) 
        2. From (date)(textfield2)
        3. To   (date)(textfield3)

我正在使用以下代码将从表单中获取的这些字段值插入到临时表中

        Statement statement6 = db.createStatement("INSERT INTO Temp(date,amount_bill,narration) select date,amount,narration from Bills where name=\'"+TextField1.getText()+"\' AND substr(date,7)||substr(date,4,2)||substr(date,1,2) <= substr (\'"+TextField3.getText()+"\',7)||substr (\'"+TextField3.getText()+"\',4,2)||substr (\'"+TextField3.getText()+"\',1,2) AND substr(date,7)||substr(date,4,2)||substr(date,1,2) >= substr (\'"+TextField2.getText()+"\',7)||substr (\'"+TextField2.getText()+"\',4,2)||substr (\'"+TextField2.getText()+"\',1,2) ");
                    statement6.prepare();
                    statement6.execute();       
                    statement6.close(); 

现在,如果我在我的表单中为上述过滤器输入以下输入

               1.Ricky
               2.01/02/2012
               3.28/02/2012

它可以完美地获取这些日期范围之间的日期。 但现在我想插入低于和高于提供的这 2 个日期范围的值。

我已经尝试使用此代码。但它没有显示任何结果。我只是想不出错误在哪里

以下代码用于查找日期小于 01/02/2012 且大于 28/02/2012 的条目。

          Statement statementVII = db.createStatement("INSERT INTO Temp5(date,amount_rec,narration) select date,amount,narration from Bills where name=\'"+TextField1.getText()+"\' AND substr(date,7)||substr(date,4,2)||substr(date,1,2) < substr (\'"+TextField2.getText()+"\',7)||substr (\'"+TextField2.getText()+"\',4,2)||substr (\'"+TextField2.getText()+"\',1,2) AND substr(date,7)||substr(date,4,2)||substr(date,1,2) > substr (\'"+TextField3.getText()+"\',7)||substr (\'"+TextField3.getText()+"\',4,2)||substr (\'"+TextField3.getText()+"\',1,2)");
                    statementVII.prepare();
                    statementVII.execute();       
                    statementVII.close(); 

有人对此有意见,请指导。谢谢。

【问题讨论】:

  • 数据库是进行字符串操作的错误位置。 Sqllite 支持 datetime 类型 - 我建议更改为。

标签: sql forms sqlite blackberry


【解决方案1】:

您需要将 Or 子句与括号一起使用:

WHERE name='....' AND (yourDateField<yourLowerDate OR yourDateField>yourHigherDate)

【讨论】:

  • 非常感谢。括号上的一个愚蠢的错误让我思考了这么久。再次感谢。
  • @techie,如果答案解决了您的问题,那么您为什么不将答案标记为已接受?它会帮助别人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多