`

检索指定时间范围内的数据与预期不一致

阅读更多
问题背景:
在不同日期内进行不同的业务逻辑,在测试环境进行模拟,将日期设置当天时间,通过时分秒区分不同的日期;
不在此时间区间内的数据被统计到了此时间区间内;

问题定位:
Mybatis配置文件中SQL
parameterType = map
确认传入的时间参数为字符串,格式为 yyyy-MM-dd HH:mm:SS,精确到时分秒,符合datetime 类型

查看SQL:
SELECT * FROM `p2p_td_project_invest`
WHERE 1=1
 AND DATE(C_CREATE_TIME) >= DATE("2017-10-27 18:31:00")
 AND DATE(C_CREATE_TIME) <= DATE("2017-10-27 18:45:00")
 ORDER BY C_CREATE_TIME DESC LIMIT 10 ;


使用了 DATE 函数
SELECT DATE(C_CREATE_TIME) FROM p2p_td_project_invest ORDER BY C_CREATE_TIME DESC LIMIT 10 ;
-- 查询结果为 yyyy-MM-dd

SELECT DATE("2017-10-27 18:45:00") FROM DUAL ;
-- 查询结果为 yyyy-MM-dd


即,虽然传入的参数为 yyyy-MM-dd HH:mm:SS 格式,经过 DATE 处理后变为 yyyy-MM-dd 格式

解决方式:
SELECT * FROM `p2p_td_project_invest`
WHERE 1=1
 AND C_CREATE_TIME >= DATE("2017-10-10")
 AND C_CREATE_TIME <= DATE("2017-10-19") 
 ORDER BY C_CREATE_TIME DESC LIMIT 10 ;
-- 去掉字段上的DATE 函数,结果正确


 SELECT * FROM `p2p_td_project_invest`
WHERE 1=1
 AND C_CREATE_TIME >= "2017-10-27 00:00:00"
 AND C_CREATE_TIME <= "2017-10-27 23:59:59"
 ORDER BY C_CREATE_TIME DESC LIMIT 10 ;



但这样修改是不对的,C_CREATE_TIME 是 datetime 类型,而等号右侧未指定时分秒是默认0时0分0秒
SELECT * FROM `p2p_td_project_invest`
WHERE 1=1
 AND C_CREATE_TIME >= "2017-10-27"
 AND C_CREATE_TIME <= "2017-10-27"
 ORDER BY C_CREATE_TIME DESC LIMIT 10 ;


http://www.w3school.com.cn/sql/sql_dates.asp
使用时间字段为了查询准确,建议只是用日期部分,可以将截止日志后延一天,以期取到时间范围
分享到:
评论

相关推荐

    DB2异常SQLCODE信息

    - **-11742802**:值不在有效范围内,可能是在数据检索或验证中使用了超出限定范围的值。 - **-11842902**:数据更新操作(UPDATE或DELETE FROM)中GROUP BY子句使用错误。 - **-11942803**:HAVING子句与GROUP BY...

    金融银行数据治理体系详细方案(213页).doc

    - **数据安全与隐私保护**:制定数据安全策略和措施,保护敏感数据不受未授权访问。 - **数据合规性管理**:确保数据处理活动符合法律法规及行业标准的要求。 - **数据治理组织架构**:建立专门的数据治理组织结构,...

    我在MySql中存储和检索正确的日期/时间时遇到问题

    日期/时间数据如果以字符串格式存储,可能会导致解析错误,因为不同的人或程序可能使用不同的日期和时间格式,例如“YYYY-MM-DD”、“MM/DD/YYYY”或“DD/MM/YYYY”,这可能导致混淆和不一致的数据。 为了解决这个...

    MySQL面试题经典40问!(全)(含答案解释)

    - **不可重复读**:同一事务内多次读取同一数据,结果不一致。 - **幻读**:在事务中进行范围查询,结果在事务内部发生变化,导致插入时冲突或预期不符。 6. **datetime与timestamp的区别**: - datetime的范围...

    ASP.NET2.0(C#)基础教程 李勇平老师的ppt课件 char11

    3. **RangeValidator**:验证字段值是否在指定范围内,例如年龄必须在某个区间内。 4. **RegularExpressionValidator**:使用正则表达式检查字段值的格式,如邮箱地址或电话号码。 5. **CustomValidator**:允许...

    GIS开发与设计A答案

    ### GIS开发与设计A答案解析 #### 一、名词解释 1. **组件GIS**:组件GIS是一种基于组件技术开发的地理信息系统(GIS...通过全面的可行性分析,可以确保项目能够在预定的时间和预算范围内顺利完成,并达到预期的效果。

    空间数据库查询处理与优化

    - **距离**:查找与指定对象在一定距离范围内的对象。 - **西北、邻接、接触、交叠**:这些是更复杂的相邻关系,用于描述对象之间的精确位置关系。 空间查询的处理步骤通常包括: - **开始查询**:接收用户的查询...

    db2错误信息集合

    - **说明**:尝试插入或更新的数据值不在定义的范围内。 - **解决方案**:检查数据的有效性和表结构定义。 ##### 9. 指定的值不符合状态 (+162, 01514) - **说明**:指定的值与当前对象的状态不符。 - **解决方案*...

    c8051读写FLASH程序

    4. **数据校验**:写入操作后,程序会进行数据校验,确保写入的数据与预期一致,防止因写入错误导致的系统异常。 5. **错误处理**:程序应该包含错误处理机制,比如当试图写入已锁定的区域或者写入过程中发生中断时...

    C语言图书管理系统课设报告.docx

    - 示例:在删除图书时,如果输入的书号不在有效范围内,系统会提示错误并终止删除操作。 #### 三、函数调用关系 在该图书管理系统中,各函数之间的调用关系如下: 1. **数据输入函数** `int Input(Bookinfo ...

    2021-2022计算机二级等级考试试题及答案No.10079.docx

    这些规则通常用于确保数据的准确性和一致性,例如限制输入数据的格式或范围。 #### SQL 语言与数据库操作 12. **SQL 查询**:本题涉及多个SQL查询语句。第一个查询用于找出选修了“计算机原理”的学生信息;第二个...

    DB2错误解决手册

    - **55** - **对象不处于先决条件状态**:对象状态不符合预期。 - **56** - **其他SQL或产品错误**:未分类的SQL或产品错误。 - **57** - **资源不可用或操作员干预**:资源不可用或需要操作员介入。 - **58** - **...

    2021-2022计算机二级等级考试试题及答案No.13117.docx

    - **RangeValidator**:用于验证数值或日期是否在指定范围内。可以通过设置`MinimumValue`和`MaximumValue`属性来定义范围。 - **CompareValidator**:用于比较两个字段的值。例如,确认密码是否与密码一致。 - **...

    2021-2022计算机二级等级考试试题及答案No.18377.docx

    - **数据验证**:确保插入或更新到数据库中的数据符合预期的格式和范围。 ### 2. 直到型循环 **知识点:** 直到型循环至少能执行一次循环体。这是因为直到型循环的条件判断发生在循环体执行之后,这意味着即使初始...

    oracle 学习笔记

    6. Oracle数据库的锁机制用来防止数据冲突和不一致问题。 7. 如果事务没有正确提交,可能会导致一系列问题。 8. 回滚事务用于撤销未提交的事务所做的更改。 9. 保留点savepoint用于在事务中设置一个保留点,以便回滚...

    学生信息管理系统java课程设计(含源代码).pdf

    不同权限的用户可以访问不同的后台界面,实现权限范围内的操作。 6. **用户登录信息设置**:允许用户修改登录密码,确保账户安全。 设计目标在于构建一个既实用又易于操作的信息管理系统,以减轻学校工作人员的...

    SAP英汉词典TXT版

    选择选项可以灵活地指定查询的过滤条件,如日期范围、数值区间等,以便于从数据库中精确地筛选出所需的数据记录。 #### ABAP/4 变量 (abap/4 variable) ABAP/4 变量是在 ABAP 程序中用于存储数据的命名存储位置。...

    DB2 错误代码

    - **01515**:已为主机变量指定了一个空值,因为列的非空值不在主机变量的范围之内。 - **01516**:已忽略不可用的 WITH GRANT OPTION。 - **01517**:用替代字符替换不能转换的字符。 - **01519**:已为主机...

Global site tag (gtag.js) - Google Analytics