奇怪的BETWEEN

本文探讨了使用BETWEEN操作符进行日期查询时遇到的问题,发现即使查询区间内的数据存在,也可能因数据库的不同处理方式而无法获取到结果。文章通过实例分析了SQL Server中BETWEEN的具体行为,并对这一现象进行了讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天偶然发现BETWEEN的一个问题,我用BETWEEN做了一个日期条件的查询,2个日期是一样的,没有结果,然而库中是有数据的,说明结果中没有包含后一个值的内容,百度了一下,看到这样一句话:

重要事项:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。

可是在SQL Server帮助中且看到这样的话:

结果值

如果 test_expression 的值大于或等于 begin_expression 的值并且小于或等于 end_expression 的值,则 BETWEEN 返回 TRUE。

如果 test_expression 的值小于 begin_expression 的值或者大于 end_expression 的值,则 NOT BETWEEN 返回 TRUE。

 

真是无语了,以前不常用BETWEEN,看来以看也不能常用。

### 使用 `MPJLambdaWrapper` 的 Between 方法 当使用 `MPJLambdaWrapper` 来执行复杂查询时,可以通过调用 `between` 方法来限定字段值在一个特定范围内。下面是一个具体的例子,展示如何利用 `MPJLambdaWrapper` 结合 `between` 方法进行数据检索: 假设有一个场景需要获取某个时间段内创建的产品列表,并且这些产品关联到多个其他实体表。 ```java // 创建 MPJLambdaWrapper 实例并设置查询条件 MPJLambdaWrapper<BfmPmcOnlineProduct> wrapper = new MPJLambdaWrapper<>(); // 设置选择项以及主表和其他表的关系 wrapper.select(BfmPmcOnlineProduct.class, BfmPmcOnlineProduct::getProductName, BfmPmcOnlineProduct::getCreateTime) .from(BfmPmcOnlineProduct.class) // 左连接第一个表,并指定别名 'pr' .leftJoin(BfmPmcProductRecord.class, "pr", on -> on.eq(BfmPmcProductRecord::getId, BfmPmcOnlineProduct::getProductRecordId)) // 左连接第二个表,并指定别名 'do' .leftJoin(BfmPmcDispatchOrder.class, "do", on -> on.eq(BfmPmcDispatchOrder::getId, BfmPmcOnlineProduct::getDispatchOrderId)) // 应用 between 方法限制时间范围 .between(BfmPmcOnlineProduct::getCreateTime, startDate, endDate); // 执行分页查询 Page<BfmPmcOnlineProduct> pageResult = onlineProductService.page(new Page<>(pageNo, pageSize), wrapper); ``` 此代码片段展示了如何通过 `MPJLambdaWrapper` 对象构建复杂的 SQL 查询语句,在其中加入了两个左连接操作和一个基于日期区间的过滤条件[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值