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

使用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
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将人大金仓数据库中的时间字段默认值设置为数据修改时间,可以使用数据库的触发器(trigger)来实现。触发器可以在插入或更新数据时自动执行一段代码,从而实现对时间字段的默认值设置。 以下是一个示例,假设有一个名为`表名`的表,其中包含一个时间字段`时间字段名`,我们希望将其默认值设置为数据修改时间: 1. 首先,在数据库中创建一个触发器,用于在更新数据更新时间字段的值。具体的创建语句取决于所使用的数据库管理系统。以下是一个MySQL的示例: ```sql CREATE TRIGGER trigger_name BEFORE UPDATE ON 表名 FOR EACH ROW SET NEW.时间字段名 = CURRENT_TIMESTAMP; ``` 上述代码中,`trigger_name`是触发器的名称,`表名`是要设置触发器的表名,`时间字段名`是要设置默认值的时间字段名。`BEFORE UPDATE`表示在更新数据之前触发触发器。`NEW.时间字段名 = CURRENT_TIMESTAMP`表示将当前时间赋给时间字段作为默认值。 2. 然后,在插入新数据时,可以使用数据库的默认值功能来设置时间字段的初始值。具体的设置方式取决于所使用的数据库管理系统和表的定义。以下是一个MySQL的示例: ```sql CREATE TABLE 表名 ( ... 时间字段名 DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ... ); ``` 上述代码中,`DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`表示设置时间字段的默认值为当前时间,并在更新数据时自动更新时间字段的值。 通过上述触发器和默认值设置,可以实现将人大金仓数据库中的时间字段默认值设置为数据修改时间。请根据实际情况修改表名、时间字段名和数据库管理系统的语法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qdu_ghx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值