怎么样将SQLServer中的时间段excel拆分日期和时间成时间点

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)怎么判断一个时间,是否在两个字段的时间段内 - Sql Server当前位置:& &&&怎么判断一个时间,是否在两个字段的时间段内怎么判断一个时间,是否在两个字段的时间段内www.MyException.Cn&&网友分享于:&&浏览:326次如何判断一个时间,是否在两个字段的时间段内?RT有个假期表,里面有开始时间,结束时间然后传来一个时间,如05-01。判断这个时间在不在表中的时间段内------解决方案--------------------时间 between 字段1 and 字段2
------解决方案--------------------如果你不想包含字段1和字段2可以where 时间&字段1 and 时间&字段2
------解决方案--------------------
where 05-01&开始时间
And 05-01&结束时间??
------解决方案--------------------@dt between right(convert(varchar(10), 开始时间,120),5) and right(convert(varchar(10), 结束时间,120),5)
------解决方案--------------------select *,case when 时间 between 开始时间 and 结束时间 then '在内' else '不在内' end from 假期表
------解决方案--------------------上面的语句,直接就根据你的假期表, 查询出想要的表结果
------解决方案--------------------SQL code
create table t_time(
studentId int,
begin_time datetime,
end_time datetime
truncate table t_time
insert t_time
select 1,'', ''
select 2,'', ''
select 3,'', ''
select 4,'', ''
select 5,'', ''
select 6,'', ''
select * from t_time
where begin_time &= '' and end_time &''
------解决方案--------------------学习了
------解决方案--------------------SQL code
use PracticeDB
if exists (select 1 from sysobjects where name='tb')
drop table tb
create table tb (id int,start_time date,end_time date)
insert into tb
select 1,'','' union all
select 2,'','' union all
select 3,'','' union all
select 4,'',''
declare @date varchar(10)
@date ='05-01'
select id,(case
when @date between right(convert(varchar(10),start_time,120),len(convert(varchar(10),start_time,120))-5)
and right(convert(varchar(10),end_time,120),len(convert(varchar(10),end_time,120))-5) then '在' else '不在' end) [在不在内]
------解决方案--------------------我帮楼主验证过了探讨SQL codeuse PracticeDBgoif exists (select 1 from sysobjects where name='tb')drop table tbgocreate table tb (id int,start_time date,end_time date)goinsert into tb select 1,'2010-01-……
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有返回表示指定日期的指定日期部分的整数。语法& DATEPART ( datepart , date )& & 参数datepart& 指定要返回的日期部分的参数。有关详细信息,请参阅本主题后面的“备注”部分。date& 返回 datetime 值(或可隐式转换为 datetime 值的值)的表达式。date 参数也可以是日期格式的字符串。datetime 数据类型仅用于 1753 年 1 月 1 日之后的日期。 对于之前的日期,将存储为字符数据。在输入 datetime 值时,请始终使用单引号将它们括起来。如果只指定年份的后两位数字,小于或等于两位截止年份配置选项值的后两位数字的值将与截止年份处于同一世纪中。比此选项值的后两位数字大的值先于截止年份的世纪。例如,如果两位数字的截止年份是 2049(默认值),则将被解释为 2049,而将被解释为 1950。为了避免产生歧义,请使用四位年份。& 有关指定日期的详细信息,请参阅数据类型中的 datetime。& 返回值int& 备注下表列出了 Microsoft SQL Server 2005 Mobile Edition 可识别的 datepart 选项和缩写:日期部分& 缩写&& 年份& yy、yyyy& & 季度& qq、q& & 月份& mm、m& & 每年的某一日& dy、y& & 日期& dd、d& & 星期& wk、ww& & 工作日 dw& 小时& hh& & 分钟& mi、n& & 秒& ss、s& & 毫秒& ms&&
阅读(...) 评论()sql查询两个时间段是否在数据库里的时间段,该怎么处理 - Sql Server当前位置:& &&&sql查询两个时间段是否在数据库里的时间段,该怎么处sql查询两个时间段是否在数据库里的时间段,该怎么处理www.MyException.Cn&&网友分享于:&&浏览:114次sql查询两个时间段是否在数据库里的时间段我的文本框里的时间段是:14:00,15:00,一直到23:00,有两个文本,时间段是一样的,数据库的时间段未知,当用户输入的时间段和数据的时间有冲突,就会查询出来例如:数据库里有 14:00 到 18:00 ,我从文本框输入15:00到16:00,这个时间段已经包含在数据库的时间段了,但是怎么查出来,又例如:14:00到15:00------解决方案--------------------
a1 |-----------------| a2
b1|--------------------|b2
--例如上面两个线段
b1 between a1 and a2 or b2 between a1 and a2
--时一定有交集
b1&a1 and b2&a2
--时有交集
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有分解跨天的时间数据
环境:SQL SERVER 2005
有如下表:
-----------------------------------------------------------------------------------------------------------------
设备 开始时间 结束时间 总时间(分钟)
03:41:32 635
23:59:59 3605
----------------------------------------------------------------------------------------------------------------
1、将每个设备的时间段循环得出每天总时间
2、1天的时间计算结果必须是1440
3、不能用游标方式处理
需求结果集表如下:
-----------------------------------------------------------------------------------------------------------------
设备 开始时间 结束时间 总时间(分钟)
23:59:59 413
03:41:32 222
23:59:59 185
23:59:59 1440
23:59:59 1440
----------------------------------------------------------------------------------------------------------------------
该问题已有网友用递归实现,如果不用递归,我们该怎么处理呢?下面,我说一下我的实现思路:
1.求出每个设备开始时间和结束时间相差的天数
2.生成分解后的新时间
3.求出分解后每个设备每天的时间差(分钟),如果是一整天,则计为1440;
如果是最后一天,则用总时间减去前面的时间总和。
/*测试数据*/
AS ( SELECT
'A' AS sb ,
CONVERT(DATETIME, ' 17:06:49') AS date_begin ,
CONVERT(DATETIME, ' 03:41:32') AS date_end ,
635 AS total_time
'B' AS sb ,
CONVERT(DATETIME, ' 20:54:42') AS date_begin ,
CONVERT(DATETIME, ' 23:50:52') AS date_end ,
3056 AS total_time
'C' AS sb ,
CONVERT(DATETIME, ' 12:40:20') AS date_begin ,
CONVERT(DATETIME, ' 23:59:59') AS date_end ,
2119 AS total_time
),/*计算两个时间点之间相差的天数*/
AS ( SELECT
date_begin ,
date_end ,
total_time ,
DATEDIFF(day, date_begin, date_end) AS cacl_day--开始时间和结束时间相差的天数
),/*将隔天的时间分解*/
AS ( SELECT
CASE WHEN msv.number = 0 THEN date_begin
ELSE CONVERT(VARCHAR(10), DATEADD(DAY, msv.number,
date_begin), 120)
END AS date_begin ,
CASE WHEN msv.number = x.cacl_day THEN date_end
ELSE CONVERT(VARCHAR(10), DATEADD(DAY, msv.number,
date_begin), 120)
+ ' 23:59:59'
END AS date_end ,
total_time ,
CASE WHEN msv.number = x.cacl_day THEN 1
END AS flag--如果是最后一天,标识为1,否则为0
master..spt_values msv
msv.type = 'P'
AND msv.number &= x.cacl_day
AS ( SELECT
date_begin ,
date_end ,
total_time ,
CASE WHEN CONVERT(CHAR(8), date_begin, 108) = '00:00:00'
AND CONVERT(CHAR(8), date_end, 108) = '23:59:59'
ELSE DATEDIFF(MINUTE, date_begin, date_end)
END AS cacl_time ,--如果是一整天,那么是1440分钟,否则,2个时间相减
ROW_NUMBER() OVER ( PARTITION BY sb ORDER BY date_end ) AS rn--行号,用于后面统计各天的剩余分钟
date_begin ,
date_end ,
CASE WHEN flag = 1 THEN total_time - ( SELECT
SUM(cacl_time)
x.sb = x3.sb
AND x.rn & x3.rn
ELSE cacl_time--最后一天的耗时是总时间减去前面的时间总和
END AS cacl_time
我自己添加了一些测试数据,先看下原表的数据
感兴趣的朋友,可以对比一下这2种方法实现的异同。

我要回帖

更多关于 excel拆分时间段 的文章

 

随机推荐