Mysql 查询未找到日期范围内最后一天的行(使用<;=)?

Mysql 查询未找到日期范围内最后一天的行(使用<;=)?,mysql,grails,Mysql,Grails,在查找日期范围的存款对象的非常简单的查询中: String sqlQuery ="select d from Deposit d where status in('PENDING', 'SKIPPED') and d.depositDate <= '${endDateString}'" def allUnprocessedDeposits = Deposit.executeQuery(sqlQuery) String sqlQuery=“从存款d中选择d,其中状态为(

在查找日期范围的存款对象的非常简单的查询中:

    String sqlQuery ="select d from Deposit d where status in('PENDING', 'SKIPPED') and  d.depositDate <= '${endDateString}'"

    def allUnprocessedDeposits = Deposit.executeQuery(sqlQuery)

String sqlQuery=“从存款d中选择d,其中状态为('PENDING','SKIPPED')和d.depositDate当您只给DateTime字段指定一天时,mySQL假定为午夜,因此任何时间在午夜之后的内容都不会包含在结果中。您最好说出日期<[结束日期+1]顺便说一句,您应该使用带参数的查询,这样更安全:

String sqlQuery ="select d from Deposit d where status in('PENDING', 'SKIPPED') and  d.depositDate <= :endDate"

def allUnprocessedDeposits = Deposit.executeQuery(sqlQuery,[endDate:endDateVariable])

String sqlQuery=“从存款d中选择d,其中状态为('PENDING','SKIPPED')和d.depositDate根据您提供的信息,最可能的解释是,
depositDate
列定义为日期时间或时间戳。请注意,这些数据类型除了存储日期外,还存储时间值(分辨率为1秒)。e、 g

'2012-07-20 11:35:46'
日期时间值与日期文字(不含时间成分)的比较,例如


考虑哪些语句将被传递到数据库。有几种方法可以对付这类攻击。

哇,这太棒了,@spencer7593!我忘记了时间部分,默认为零。(我确实试着挖掘这个答案,但只是没有找到神奇的搜索词组合。)我也非常感谢关于包装专栏参考的注释;我不知道,这是一个很好的提示。还感谢关于脆弱性的说明;幸运的是,输入是受控的。谢谢你,卢卡斯!还是个很棒的新手。。。在Java工作了15年,很难适应新的语法/技巧(没有适当的指导)。
'2012-07-20 11:35:46' <= '2012-07-20'
'2012-07-20 11:35:46' <= '2012-07-20 00:00:00'
'2012-07-20 11:35:46' < DATE_ADD('2012-07-20', INTERVAL 1 DAY)
'2012-07-20 11:35:46' < '2012-07-21 00:00:00'
... d.depositDate < DATE_ADD('${endDateString}',INTERVAL 1 DAY)"
2012-07-20'; DELETE FROM Deposit ; SELECT '1