java 时间段查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 时间段查询相关的知识,希望对你有一定的参考价值。

现有一个需求,在页面上

如果两个文本框有值,就按这段时间查询,若一个有值就按这个值查询,请问sql语句怎么写?

不一定非要在sql中判断吧,可以先取两个值,然后在java类型判断,通过拼接sql的形式进行查询,如:if(存在开始时间,不存在结束时间||存在结束时间,不存在开始时间)
select * from 表名where 日期字段 = '时间'
else if(都存在)
select * from 表名 where 日期字段 between 开始时间' and '结束时间'
参考技术A select * from 表名where 日期字段between '2011-1' and '2011-10'
select * from 表名where (日期字段>='2011-1' and 日期字段<='2011-10')
参考技术B 这个好像涉及到javascript,Ajax机制,另外你用的是什么DB啊
sqlserver的话:
select * from tb where riqi between '2009-01-22 00:00:00' and '2009-01-22 23:59:59'
参考技术C 三种情况 1:左有右无 2:左无右有 3:左有右有追问

可否详细的判断最好要sql

追答

    where time >= left_value

    where time <= right_value

    where (time >=left_value and time <= right_value) / where time between left_value ad right_value

 为了确保数据有效 两输入框均有值时判断 右>左

本回答被提问者采纳
参考技术D select * from 表 where 日期 between COALESCE (?, '1800-01-01') and COALESCE(?, '2300-01-01')

java有关时间不合法查询的问题

问题:假设前台传过来一个不合法的时间,如2019-02-31,有哪些处理方式。

一:可以采用SimpleDateFormat进行校验,然后返回前台“日期不合法”之类的提示

import java.text.SimpleDateFormat;
 
class Main {
	public static void main(String[] args) {
		String str1="2020-2-1";
		String str2="2000-2-30";
		System.out.println(check(str1));
		System.out.println(check(str2));
	}
	static boolean check (String str) {
		SimpleDateFormat date=new SimpleDateFormat("yyyy-MM-dd");
		try {
			date.setLenient(false);
			date.parse(str);
		}
		catch (Exception e) {
			return false;
		}
		return true;
	}
}

 二:可进行正则表达式进行验证是否正确,如下:

public boolean isDate(String date){
      //判断日期格式和范围
      String rexp = "^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";
      Pattern pat = Pattern.compile(rexp);
      Matcher mat = pat.matcher(date);
      boolean dateType = mat.matches();
      return dateType;
}

 三:还可直接在sql语句中利用DATE_FORMAT,将时间字段转换成字符串进行比较(可实现正常查询),但缺点是数据量大时查询比较慢,

select *  from tb_ceshi_data where DATE_FORMAT(business_time, ‘%Y-%m-%d‘)>‘2019-2-31‘

以上是关于java 时间段查询的主要内容,如果未能解决你的问题,请参考以下文章

java里实现时间段的查询

java用sql语句查询某一时间段内的记录

java,做查询功能,以时间做查询条件,怎么在输入框里默认显示当前时间前一周的时间啊?

求教mongodb大神,在java中怎么以时间为条件查询

急急急 用java 怎么写lotus 的domino数据库多条件查询 包含时间段查询 在线等

JAVA日期查询:季度月份星期等时间信息