【sql查询】使用sql查询一个物品是否在有效期内的方法(数据库无这个字段 通过生产日期和保质期进行计算得出)

本文探讨了如何在SQL中查询和筛选过期产品信息,特别是在大量数据背景下,通过优化SQL语句提高性能。文章通过示例展示了如何在SELECT和WHERE子句中使用聚合函数来计算过期状态,以及如何根据需求调整查询策略以减少计算时间。

事件起因

今天在写一个查询一个产品的使用期限的时候遇到这个问题,物品的使用期限问题 稍微延伸一下的话 就有很多方面的应用 比如说 食品的生产日期和保质期,危险物品的定期检测等系列问题 所以特此来写篇文章来记录一下 以便自己以后遇到相似的问题 或者 后来者遇到相似的问题

查看上面的目录 不需要听我在这儿逼逼叨叨的 ,可以直接跳转到实际应用场景去查看对应的sql语句的写法 书写事件经过 只是给自己未来看的 顺便描述下 在什么样的场景下可能会用到这样的写法

问题描述:

当前的需求是 一张mysql数据库表里面 有一个产品的众多信息 有两列分别是产品的生产日期和有效期 现在要求能够通过前端控制查询超限的物品,并将他们按不同的颜色显示出来

sql给后端提供数据

因为这个问题是在对公司的项目进行业务增加的时候注意到的,所以不方便展示那个项目的数据库,但是我们可以来还原一下大致的业务场景,所以咱们先来建一个数据库表:
在这里插入图片描述
主要关注start_time,keep_time 分别可以表示为生成日期和有效期

然后向这个表插入两个数据:
在这里插入图片描述
根据使用start_time和keep_time (笔者的当前时间(执行这个sql的时间)是2022.02.09) 来看 第一条数据是过期了 第二条数据没有过期, 然后写下了让每一个物品的数据都通过聚合函数的方式来生成一条过期状态的表示(好让后端返回的每个物品的数据信息中带一个是否过期的字段 方便前端对过期的数据以不同的方式(颜色或其他方式)进行展现) 的sql:

SELECT *,DATE_ADD(start_time,INTERVAL keep_time month) < NOW() as overTimeStatus FROM `goods`

该条sql语句的执行效果是将原来的所有数据列后直接增加一列为 overTimeStatus 用于表示是否超限
sql的执行结果如下:
在这里插入图片描述
如图 最后一列的overTimeStatus 就是用于表示是否超限(超出使用期限–过期) 1表示已经超限,0表示未超限(在使用期限内)

实际应用场景

在具体的业务中,我们要查询的数据列可能有很多列,就比如下面这个:
在这里插入图片描述
复制出来有这么多:

SELECT
        d
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿,葱来了-C is coming

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值