【Sql Server】时间转换和查询时间范围查询不正确的原因

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 最近在做时间方法封装的时候发现了一个问题!如果sql语句输出的时间字段转为了字符串输出,那么在使用此字段作为时间范围筛选时发现无效了,没法过滤对应的时间范围内记录


作者:小5聊基础

简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑

编程原则:Write Less Do More


下面进行场景重现下

1、创建表

创建只有三个字段的表testTable,自增编号、全球唯一编号Guid、添加时间

create table testTableName
(
  id int identity(1,1) primary key,
  guidValue nvarchar(50),
  createTime datetime
)

image.gif

2、模拟一个月数据

1)可以写一个sql的循环语句按天模拟添加一个月的数据

2)定义一个整型变量,从0开始,循环30次

3)时间格式化,可以看我写的这篇文章《Sql Server日期格式化大全》

4)除了看时间格式化,还需要对时间进行加减《sql server 查询七天内的数据之时间条件格式化》

5)前一天设置,dateadd(day,-1,getdate())

declare @dayCount int
set @dayCount=0
while @dayCount<=30 begin
  insert into testTableName(guidValue,createTime)
  values(newid(),dateadd(day,-@dayCount,getdate()))
  set @dayCount+=1
end

image.gif

image.gif编辑

3、按时间查询

查询2022.12.15到2022.12.19号的记录,正确情况应该是返回5条记录

时间格式用了三个方式,小数点、斜杠、横杠,都可能正确查询出来

    • 正确返回
    select * from testTableName 
    where 1=1 and 
    --createTime>='2022.12.15 00:00:00' and createTime<='2022.12.19 23:59:59'
    createTime>='2022/12/15 00:00:00' and createTime<='2022/12/19 23:59:59'
    --createTime>='2022-12-15 00:00:00' and createTime<='2022-12-19 23:59:59'

    image.gif

    image.gif编辑

      • 错误查询方式 - 小数点格式

      image.gif编辑

        • 错误查询方式 - 斜杠格式

        image.gif编辑

          • 正确返回 - 横杠格式

          image.gif编辑

          select * from(
            select id,guidValue,convert(varchar(20),createTime,23) as createTime
            from testTableName
          ) a 
          where 1=1 and 
          --createTime>='2022.12.15 00:00:00' and createTime<='2022.12.19 23:59:59'
          --createTime>='2022/12/15 00:00:00' and createTime<='2022/12/19 23:59:59'
          createTime>='2022-12-15 00:00:00' and createTime<='2022-12-19 23:59:59'

          image.gif

            • 作为本身查询没问题

            image.gif编辑

            4、总结

            1)如果查询字段作为时间范围筛选,那么尽量不要把时间字段转为字符串格式

            2)如果时间格式转为字符串,那么不要在子查询外对字符串的时间字段进行时间范围筛选

            3)如果要作为时间范围筛选,那么使用yyyy-MM-dd格式进行筛选,否则查询无效


            相关文章
            |
            2月前
            |
            SQL 监控 关系型数据库
            一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
            RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
            |
            2月前
            |
            SQL 存储 关系型数据库
            MySQL体系结构详解:一条SQL查询的旅程
            本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
            |
            6月前
            |
            SQL 数据挖掘 数据库
            第三篇:高级 SQL 查询与多表操作
            本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
            486 1
            |
            2月前
            |
            SQL 监控 关系型数据库
            SQL优化技巧:让MySQL查询快人一步
            本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
            |
            1月前
            |
            SQL 关系型数据库 MySQL
            (SQL)SQL语言中的查询语句整理
            查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
            208 0
            |
            3月前
            |
            SQL XML Java
            通过MyBatis的XML配置实现灵活的动态SQL查询
            总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
            279 18
            |
            8月前
            |
            SQL 运维 监控
            SQL查询太慢?实战讲解YashanDB SQL调优思路
            本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
            |
            8月前
            |
            SQL 索引
            【YashanDB知识库】字段加上索引后,SQL查询不到结果
            【YashanDB知识库】字段加上索引后,SQL查询不到结果
            |
            3月前
            |
            SQL 人工智能 数据库
            【三桥君】如何正确使用SQL查询语句:避免常见错误?
            三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
            146 0
            |
            6月前
            |
            SQL 关系型数据库 MySQL
            凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
            凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
            凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
            下一篇
            oss云网关配置