当前位置:首页 » 编程语言 » sql日期相隔的月数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql日期相隔的月数

发布时间: 2023-01-18 10:29:33

1. 查询两个日期相差的月数和剩下的天数

对于任意2个日期比如:date_start=2006-10-1、date_end=2006-10-14 ,首先计算这连个日期之间的时间间隔(天数),然后分别对date_start 和date_end 取得它们下一个星期一的日期,这样就可以得到一个新的可以整除7的完整日期间隔(这个新的日期间隔已经把星期几的问题剔出掉了),换一种说法就是我们可以得到,这两个新的日期之间的周数,拿这个周数乘以5就是工作日期了(tmpWorkingDays)。但是这个日期并不是我们所要的日期,接下来我们要做的就是计算date_start,date_end这两个日期对于根据它们所产生的新的日期之间的时间偏移量,date_start的偏移量(date_start_change)是需要加的,而date_end的这个偏移量(date_end_change)是需要减去的。 最后我们只要用tmpWorkingDays+date_start_change-date_end_change就是我们所要求的实际工作日了。以下是所有实现代码(两个日期跨年也没有问题)。

package com.date.utlit;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 计算任意2个日期内的工作日(没有考虑到国定假日)
* @author user
*
*/
public class DateCal {

/**
* @param args
*/
public static void main(String[] args) {
try {

String strDateStart = "2006-10-1";
String strDateEnd = "2006-10-14";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date_start = sdf.parse(strDateStart);
Date date_end = sdf.parse(strDateEnd);
DateCal app = new DateCal();
Calendar cal_start = Calendar.getInstance();
Calendar cal_end = Calendar.getInstance();
cal_start.setTime(date_start);
cal_end.setTime(date_end);
System.out.println("星期-->" + app.getChineseWeek(cal_start)
+ " 日期-->" + cal_start.get(Calendar.YEAR) + "-"
+ (cal_start.get(Calendar.MONTH) + 1) + "-"
+ cal_start.get(Calendar.DAY_OF_MONTH));
System.out.println("星期-->" + app.getChineseWeek(cal_end) + " 日期-->"
+ cal_end.get(Calendar.YEAR) + "-"
+ (cal_end.get(Calendar.MONTH) + 1) + "-"
+ cal_end.get(Calendar.DAY_OF_MONTH));
System.out.println("工作日为-->"
+ app.getWorkingDay(cal_start, cal_end));
System.out.println("休息日-->"+app.getHolidays(cal_start, cal_end));
} catch (Exception e) {
// TODO: handle exception
}
}

public int getDaysBetween(java.util.Calendar d1, java.util.Calendar d2) {
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(java.util.Calendar.DAY_OF_YEAR)
- d1.get(java.util.Calendar.DAY_OF_YEAR);
int y2 = d2.get(java.util.Calendar.YEAR);
if (d1.get(java.util.Calendar.YEAR) != y2) {
d1 = (java.util.Calendar) d1.clone();
do {
days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR);
d1.add(java.util.Calendar.YEAR, 1);
} while (d1.get(java.util.Calendar.YEAR) != y2);
}
return days;
}

/**
* 计算2个日期之间的相隔天数
* @param d1
* @param d2
* @return
*/
public int getWorkingDay(java.util.Calendar d1, java.util.Calendar d2) {
int result = -1;
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}

int betweendays = getDaysBetween(d1, d2);

int charge_date = 0;
int charge_start_date = 0;//开始日期的日期偏移量
int charge_end_date = 0;//结束日期的日期偏移量
// 日期不在同一个日期内
int stmp;
int etmp;
stmp = 7 - d1.get(Calendar.DAY_OF_WEEK);
etmp = 7 - d2.get(Calendar.DAY_OF_WEEK);
if (stmp != 0 && stmp != 6) {// 开始日期为星期六和星期日时偏移量为0
charge_start_date = stmp - 1;
}
if (etmp != 0 && etmp != 6) {// 结束日期为星期六和星期日时偏移量为0
charge_end_date = etmp - 1;
}
// }
result = (getDaysBetween(this.getNextMonday(d1), this.getNextMonday(d2)) / 7)
* 5 + charge_start_date - charge_end_date;
//System.out.println("charge_start_date>" + charge_start_date);
//System.out.println("charge_end_date>" + charge_end_date);
//System.out.println("between day is-->" + betweendays);
return result;
}

public String getChineseWeek(Calendar date) {
final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
"星期六" };

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);

// System.out.println(dayNames[dayOfWeek - 1]);
return dayNames[dayOfWeek - 1];

}

/**
* 获得日期的下一个星期一的日期
*
* @param date
* @return
*/
public Calendar getNextMonday(Calendar date) {
Calendar result = null;
result = date;
do {
result = (Calendar) result.clone();
result.add(Calendar.DATE, 1);
} while (result.get(Calendar.DAY_OF_WEEK) != 2);
return result;
}

/**
*
* @param d1
* @param d2
* @return
*/
public int getHolidays(Calendar d1,Calendar d2){
return this.getDaysBetween(d1, d2)-this.getWorkingDay(d1, d2);

}

}

2. sql 中,如何获取两个日期之前月数,周数,天数

定义和用法

DATEDIFF() 函数返回两个日期之间的时间。

语法

DATEDIFF(datepart,startdate,enddate)

datepart 缩写

年 yy, yyyy

季度 qq, q

月 mm, m

年中的日 dy, y

日 dd, d

周 wk, ww

星期 dw, w

小时 hh

分钟 mi, n

秒 ss, s

毫秒 ms

微妙 mcs

纳秒 ns

--相差月数
SELECTDATEDIFF(mm,'2018-1-30','2018-12-31')

--相差周数
SELECTDATEDIFF(wk,'2018-1-30','2018-12-31')

--相差天数
SELECTDATEDIFF(dd,'2018-1-30','2018-12-31')

3. 求用sql求两个日期相隔的月数,比如2013-1-1和2014-2-1,相隔为14个月,精确到月

select datediff(month, 开始日期,结束日期);

4. sql查询问题 我想查询两个日期之间的数据,比如3月到4月的数据,这个sql语句该怎么写

最简单的方法就是用char(4)来保存生日。
select student_name
from students
where student_birthday between '0101' and '0505'
order by student_birthday

也可以用数值型:)
select student_name
from students
where student_birthday between 101 and 505
order by student_birthday

当然也可以用日期型

5. Oracle怎么样用sql语句得出相差的月数

使用Months_between(f,s) 日期f和s间相差月数,但结果有小数。你要整数,可以进行截取。
实例:
SELECT Months_between(SYSDATE,input_date) FROM aa_yudy_deal

6. 如何写SQL语句,判断是否间隔超过一个月

datediff函数

逻辑是月份+1,并且日期大于之前的日期,就可以判断超过一个月了

declare@datetime1datetime,@datetime2datetime
set@datetime1='2017-5-25'
set@datetime2=getdate()
--(1)结果等于1
selectdatediff(month,@datetime1,@datetime2)
--(2)结果大于0
selectday(@datetime2)-day(@datetime1)
--(1)和(2)的条件同时满足就超过一个月了。ps如果要判断超过两月及以上满足第(1)个条件大于1就行了

7. PL/SQL中如何求两个日期之间相差的年月日(就是要得到这样的数据:YYYYMMDD),要精确值

用months_between()
函数求出两个日期相差的月数,这个求出来比较准确,可以满足精确计算工龄也比较符合业务需求,再除以12
select
months_between(sysdate,date'2012-01-01')
from
al;

8. sqlserver中返回两个日期间相差几年零几月

select datediff(month,'2017-1-5','2018-05-25')/12 ,datediff(month,'2017-1-5','2018-05-25')%12
执行结果:1年4个月
注释:
datediff(month,'2017-1-5','2018-05-25')取出两个日期相差的总月数;
datediff(month,'2017-1-5','2018-05-25')/12 取出两个日期相差的总年数。
datediff(month,'2017-1-5','2018-05-25')%12 取出总年数后,剩余月数。

9. sql数值型日期怎么相减得到月份差

select datediff(year, 开始日期,结束日期); --两日期间隔年
select datediff(quarter, 开始日期,结束日期); --两日期间隔季
select datediff(month, 开始日期,结束日期); --两日期间隔月
select datediff(day, 开始日期,结束日期); --两日期间隔天
select datediff(week, 开始日期,结束日期); --两日期间隔周
select datediff(hour, 开始日期,结束日期); --两日期间隔小时
select datediff(minute, 开始日期,结束日期); --两日期间隔分
select datediff(second, 开始日期,结束日期); --两日期间隔秒