用java实现sql server中的datediff函数

 1 /**
 2  * 计算两个时间的相差值, 可以计算相差的天数, 年数, 月份数, 分钟数, 秒数
 3  *
 4  * @param dateType 要得到的两个时间之间差值的类型, 例如要得到两个时间差的天数?还是小时数?
 5  * @param startDate 开始时间
 6  * @param endDate 结束时间
 7  * @return (结束时间-开始时间) 之间的 dateType值
 8  */
 9 public static int datediff(String dateType, Date startDate, Date endDate) {
10
11 /* 求startDate与endDate之间相差的年数 */
12 if ("y".equalsIgnoreCase(dateType) || "yy".equalsIgnoreCase(dateType)) {
13 Calendar calendar = Calendar.getInstance();
14 calendar.setTime(startDate);
15 int startYear = calendar.get(Calendar.YEAR);    //当前年的年份
16 calendar.setTime(endDate);
17 int endYear = calendar.get(Calendar.YEAR);
18 return endYear - startYear;
19 }
20 /* 求startDate与endDate之间相差的月份数 */
21 if ("M".equals(dateType) || "MM".equals(dateType)){
22 Calendar calendar = Calendar.getInstance();
23 calendar.setTime(startDate);
24 int startMonth = calendar.get(Calendar.MONTH)+calendar.get(Calendar.YEAR)*12;    // 月份= 当前年的年份*12 + 当前年的月份, 下同
25 calendar.setTime(endDate);
26 int endMonth = calendar.get(Calendar.MONTH)+calendar.get(Calendar.YEAR)*12;
27 return endMonth - startMonth;
28 }
29 /* 求startDate与endDate之间相差的天数 */
30 if ("d".equalsIgnoreCase(dateType) || "dd".equalsIgnoreCase(dateType)) {
31 long startTime = startDate.getTime();
32 long endTime = endDate.getTime();
33 return (int) ((endTime - startTime) / 1000 / 60 / 60 / 24);    // 天数 = (结束时间-开始时间)之间的毫秒数 / (一天拥有的毫秒数)
34 }
35 /* 求startDate与endDate之间相差的小时数 */
36 if ("h".equalsIgnoreCase(dateType) || "hh".equalsIgnoreCase(dateType)) {
37 long startTime = startDate.getTime();
38 long endTime = endDate.getTime();
39 return (int) ((endTime - startTime) / 1000 / 60 / 60);
40 }
41 /* 求startDate与endDate之间相差的分钟数 */
42 if ("m".equals(dateType) || "mm".equals(dateType)) {
43 long startTime = startDate.getTime();
44 long endTime = endDate.getTime();
45 return (int) ((endTime - startTime) / 1000 / 60);
46 }
47 /* 求startDate与endDate之间相差的秒数 */
48 if ("s".equalsIgnoreCase(dateType) || "ss".equalsIgnoreCase(dateType)) {
49 long startTime = startDate.getTime();
50 long endTime = endDate.getTime();
51 return (int) ((endTime - startTime) / 1000);
52 }
53
54 return 0;
55
56 }
时间: 2024-10-07 22:38:18

用java实现sql server中的datediff函数的相关文章

SQL Server中的RAND函数的介绍和区间随机数值函数的实现

    工作中会遇到SQL Server模拟数据生成以及数值列值(如整型.日期和时间数据类型)随机填充等等任务,这些任务中都要使用到随机数.鉴于此,本文将对SQL Server中随机数的使用简单做个总结 .   T-SQL 随机有关的三个函数          RAND([seed] 此函数生成从0到1之间随机 float 值(详细说明查看https://technet.microsoft.com/zh-cn/library/ms177610(v=sql.90).aspx). CHECKSUM

SQL SERVER 中的 object_id()函数

在数据库中有一个系统表sysobjects,里面存储了数据库各个对象的信息.可以查询下看看结果.可以看出每个对象都有一个ID,这个表存储了表,存储过程,触发器,视图等相关信息.注意:字段没有. object_id就是根据对象名称返回该对象的id.  object_name是根据对象id返回对象名称. select object_id(对象名)等同于:  select id from sysobjects where name=对象名 select object_name(id号)等同于:  se

sql server中的开窗函数over、视图、事物

一.开窗函数over的作用有两个: 1.排序order by,row_number,翻页 2.划区partition by,结合聚合函数针对某部分数据进行汇总 翻页的sql server 语句: select * from ( select *,row_number() over( order by id) as num from 表名) as t where t.num>6 and t.num<10 二.视图:用于存储一个select语句.并不是存储数据的一个容器. create view

sql server中的charindex函数用法解析(在一段字符中搜索字符或者字符串-----返回expression1在expression2出现的位置;反之,返回0)

https://blog.csdn.net/xinghuo0007/article/details/70651358 知识点一:charindex()语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 解析: expression1 必需 ---要查找的子字符串 expression2 必需 ---父字符串 start_location 可选 ---指定从父字符串开始查找的位置,默认位置从1开始 知识点二: charin

Sql Server 中利用Convert 函数转换Datetime 到 String

CONVERT(varchar(10), date, 23) 1    02/22/06            CONVERT(varchar(10), date, 1) 0 Feb 22 2006 4:26PM CONVERT(CHAR(19), CURRENT_TIMESTAMP, 0) 1 02/22/06 CONVERT(CHAR(8), CURRENT_TIMESTAMP, 1) 2 06.02.22 CONVERT(CHAR(8), CURRENT_TIMESTAMP, 2) 3 2

MS SQL server中的isnull函数

一.ISNULL语法格式 ISNULL ( check_expression , replacement_value ) 二.参数简介 check_expression:将被检查是否为 NULL的表达式,check_expression可以是任何类型的. replacement_value:在 check_expression 为 NULL时将返回的表达式,replacement_value 必须与 check_expresssion 具有相同的类型. 三.返回值 返回与 check_expre

SQL Server 中的排名函数与使用场景

1.RowNumber() Over (oder by.....)   在需要对某个不连续ID的表进行排序时使用 2.ROW_NUMBER() over(PARTITION by ...... order by ......)  在需要对某个表先进行分区时,再在分区内进行排序操作时使用 3.RANK() over(order by ......) 在需要对某个字段进行同名排序时使用(不考虑并列) 4.DENSE_RANK() over(order by ......) (同上,但是考虑并列名次)

SQL Server中的GUID

GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字.例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值. 世界上的任何两台计算机都不会生成重复的

(4.38)sql server中的事务控制及try cache错误处理

一.事务控制 BEGIN TRY BEGIN TRAN; DECLARE @aaa NVARCHAR(MAX); SET @aaa = 9 / 0; COMMIT TRAN; END TRY BEGIN CATCH --[错误]-- DECLARE @ErrorMessage NVARCHAR(MAX) , @ErrorSeverity INT , @ErrorState INT , @exception NVARCHAR(255); SELECT @ErrorMessage = ERROR_M