数据库根据时间字段筛选数据(不定时更新)

使用MybtiesPlus的lambda表达式

// Timestamp 是java.sql包下的类
public static Timestamp getTimeStampByDate(Date date) {
    return new Timestamp(date.getTime());
  }
// happenedTime实体类的类型LocalDateTime
// happenedTime数据库表中字段类型为timestamp类型,mybatiesplus根据表自动生成的实体类为LocalDateTime类型
carAlarmInfoMapper.selectList(
            new QueryWrapper<CarAlarmInfo>().lambda()
                .ge(CarAlarmInfo::getHappenedTime,
     DateTool.getTimeStampByDate(carAlarmInfoBo.getStartTime()))
                .le(CarAlarmInfo::getHappenedTime,
     DateTool.getTimeStampByDate(carAlarmInfoBo.getEndTime())));
     

使用JPA动态拼接

JPA动态查询,拼接Specification
 private Specification<VehiclePassEntity> createSpecification(
      QueryParams queryParams) {
    return (root, criteriaQuery, criteriaBuilder) -> {
      List<Predicate> predicateList = new ArrayList<>();
        // 开始时间,参数为date类型
      if (!JudgeEmpty.isEmpty(queryParams.getStartTime())) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = null;
        Date endDate = null;
        try {
          startDate = format.parse(queryParams.getStartTime());
          endDate = format.parse(queryParams.getEndTime());
        } catch (Exception e) {
          logger.error("时间格式化失败");
        }
        predicateList.add(criteriaBuilder.between(root.<Date>get("passTime"), startDate, endDate));
      }
      return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
    };
  }


根据时间查数据sql

方法一:直接比较

select * from 表名 where 时间字段>= '2022-01-01 00:00:00' and 时间字段< '2022-01-15 00:00:00';

方法二:sql中between and

select * from 表名 where 时间字段 between '2022-01-01 00:00:00' and '2022-01-15 00:00:00';

方法三:TO_DATE或TO_TIMESTAMP方法

// SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以采用了mi代替分钟,24代表24小时时间制
select * from 表名 where 时间字段 between to_date('202-01-01','YYYY-MM-DD') and to_date('2022-01-15','YYYY-MM-DD');
// 在pgsql中to_date方法用如下方式,按天筛选
1to_date(createddate::text,'YYYY-MM-DD')
2to_date(cast(createddate as TEXT),'YYYY-MM-DD')
// 或者to_timestamp方法准确时间
1TO_TIMESTAMP('202-01-01 00:00:00'::text,'YYYY-MM-DD hh24:mi:ss')
2TO_TIMESTAMP(cast('2022-01-15 00:00:00' as TEXT),'YYYY-MM-DD hh24:mi:ss')

select * from 表名 where 时间字段 >= '2022-01-01 00:00:00'::timestamp and 时间字段< '2022-01-15 00:00:00'::timestamp;

to_date和to_timestamp方法

to_timestamp('2020-02-27 12:12:12','yyyy-MM-dd hh24:mi:ss') 
to_date('2020-02-27 12:12:12','yyyy-MM-dd hh24:mi:ss') 

结果:
to_timestamp返回结果:2020-02-27 12:12:12
to_date返回结果:2020-02-27
方法四:通过函数比较时间字段的某个值

select *  where  date_part('minute', now() - 数据库时间字段) > 30
           or date_part('day',now()-数据库时间字段)>0
           or date_part('hour',now()-数据库时间字段)>0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qdu_ghx

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值