【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格式进行筛选,否则查询无效


            相关文章
            |
            4月前
            |
            SQL 数据挖掘 数据库
            第三篇:高级 SQL 查询与多表操作
            本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
            288 1
            |
            6月前
            |
            SQL 运维 监控
            SQL查询太慢?实战讲解YashanDB SQL调优思路
            本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
            |
            1月前
            |
            SQL 人工智能 数据库
            【三桥君】如何正确使用SQL查询语句:避免常见错误?
            三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
            84 0
            |
            6月前
            |
            SQL 索引
            【YashanDB知识库】字段加上索引后,SQL查询不到结果
            【YashanDB知识库】字段加上索引后,SQL查询不到结果
            |
            2月前
            |
            SQL
            SQL中如何删除指定查询出来的数据
            SQL中如何删除指定查询出来的数据
            |
            4月前
            |
            SQL 关系型数据库 MySQL
            凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
            凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
            凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
            |
            3月前
            |
            SQL 存储 弹性计算
            OSS Select 加速查询:10GB CSV 文件秒级过滤的 SQL 语法优化技巧
            OSS Select 可直接在对象存储上执行 SQL 过滤,跳过文件下载,仅返回所需数据,性能比传统 ECS 方案提升 10~100 倍。通过减少返回列、使用等值查询、避免复杂函数、分区剪枝及压缩优化等技巧,可大幅降低扫描与传输量,显著提升查询效率并降低成本。
            |
            6月前
            |
            SQL 大数据 数据挖掘
            玩转大数据:从零开始掌握SQL查询基础
            玩转大数据:从零开始掌握SQL查询基础
            254 35
            |
            8月前
            |
            SQL 安全 数据库
            如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
            如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
            482 77
            |
            6月前
            |
            SQL 关系型数据库 MySQL
            如何优化SQL查询以提高数据库性能?
            这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。