讲师中心 微信公众号
AI工具推荐 视频效率加速

怎样在SQL中使用BETWEEN AND过滤指定范围数值

夜晨吖_6541

夜晨吖_6541

发布时间:2026-10-05 08:29:01

|

828人浏览过

|

来源于php中文网

原创

BETWEEN AND是闭区间操作符,包含左右边界值,等价于>= AND <=,而非> AND <;常见错误是误认为其等价于> AND <或>= AND <。

怎样在sql中使用between and过滤指定范围数值

WHERE子句里用BETWEEN AND写法最简但易错

BETWEEN AND是闭区间操作符,包含左右边界值。很多人误以为它等价于>= AND 就完全安全,其实不然——当字段含<code>NULL、或类型隐式转换发生时,行为可能出人意料。

正确写法示例:

SELECT * FROM orders WHERE amount BETWEEN 100 AND 500;
这等价于amount >= 100 AND amount ,但数据库会一次性做范围判断,某些引擎(如PostgreSQL)在有索引时能更好利用B-Tree结构。

  • 必须确保左右值类型一致:若amount是DECIMAL,不要写BETWEEN '100' AND '500',字符串比较会导致全表扫描甚至错误排序
  • BETWEEN不支持列名颠倒:写成BETWEEN 500 AND 100不会自动交换,结果恒为FALSE
  • 对日期字段要小心时分秒:若created_at是TIMESTAMP,BETWEEN '2024-01-01' AND '2024-01-31'实际查的是2024-01-01 00:00:00到2024-01-31 00:00:00,丢掉最后一天的全部数据

日期范围过滤必须显式补全时间部分

用BETWEEN查日期最容易漏掉当天下午的数据。比如想查2024年1月整月,直接写BETWEEN '2024-01-01' AND '2024-01-31',MySQL或PostgreSQL会把右值解释为'2024-01-31 00:00:00',所有'2024-01-31 10:23:45'都被排除。

  • 安全做法是用开区间+: <code>created_at >= '2024-01-01' AND created_at
  • 如果坚持用BETWEEN,右值必须带时间: BETWEEN '2024-01-01' AND '2024-01-31 23:59:59.999'(注意SQL Server毫秒精度是.997)
  • PostgreSQL可用DATE类型字段配合::DATE转换,但会失去年月日以外信息,且无法走索引

NULL值会让BETWEEN整个条件失效

只要被比较的字段值为NULL,column BETWEEN a AND b永远返回UNKNOWN,而WHERE只认TRUE,所以该行一定被过滤掉——哪怕你本意是“允许空值也通过”。

  • 若需包含NULL,必须显式加判断:(amount BETWEEN 100 AND 500) OR amount IS NULL
  • 不能写成amount BETWEEN 100 AND 500 OR NULL——语法错误,OR后面必须是布尔表达式
  • 有些ORM生成的SQL会悄悄把NULL转成IS NULL,但原生SQL中BETWEEN和NULL就是绝缘的

性能上BETWEEN并不总比拆开快

多数情况下BETWEEN和手写>= AND 执行计划一致,但某些场景下差异明显:

  • SQL Server对BETWEEN有时会启用更激进的并行计划,而手写两个条件可能走串行;反过来,Oracle 12c+对拆开写法更容易应用函数索引
  • 如果左值或右值是子查询或函数调用(如BETWEEN (SELECT min_val FROM cfg) AND (SELECT max_val FROM cfg)),每次比较都可能重复执行子查询,不如先用WITH绑定变量
  • 对非数字类型(如字符串),BETWEEN 'a' AND 'm'依赖字符集排序规则,中文环境下可能不符合字典序直觉,建议用COLLATE明确指定

边界值的语义准确性,比语法是否简洁重要得多。写完记得用EXPLAIN看执行计划,尤其当数据量上百万后,一个没意识到的隐式类型转换就能让索引彻底失效。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4003

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

851

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1049

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

5861

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2783

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

5840

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

7761

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1050

2024.04.29

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn