高手们日期时间的加减法怎么做 本帖最后由 chirea 于 2011-06-02 14:08:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我用datediff函数不能解决,时.分还有第二列数据最后两列是空的.以空计算如果用case转的话.又算不出来了. create table #考勤表(number varchar(50), ClassUP1 datetime ,ClassNext1 datetime, ClassUP2 datetime,ClassNext2 datetime)insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)goselect ltrim(sj/60)+':'+ltrim(sj%60) from( select datediff(mi,ClassUP1,ClassNext1)+datediff(mi,ClassUP2,ClassNext2)sj from #考勤表 )tgodrop table #考勤表/*-------------------------11:0NULL(2 行受影响)*/ 空值的处理:create table #考勤表(number varchar(50), ClassUP1 datetime ,ClassNext1 datetime, ClassUP2 datetime,ClassNext2 datetime)insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)goselect ltrim(sj/60)+':'+ltrim(sj%60) from( select isnull(datediff(mi,ClassUP1,ClassNext1),0)+isnull(datediff(mi,ClassUP2,ClassNext2),0)sj from #考勤表 )tgodrop table #考勤表/*-------------------------11:04:0(2 行受影响)*/ 速度真快,谢谢你转成了字符型,需要这个计算的结果与int型做判断的如11.0>=9可这样的话.我不能比较了 我用 cast( ltrim(sj/60)+'.'+ltrim(sj%60) as decimal(18,2) ) 转一下了.但不知有什么影响没? 你在这儿不是要的 1:23,即 小时:分吗?如果要的是小时的小数值,则:create table #考勤表(number varchar(50), ClassUP1 datetime ,ClassNext1 datetime, ClassUP2 datetime,ClassNext2 datetime)insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)goselect 1.0*sj/60 from( select isnull(datediff(mi,ClassUP1,ClassNext1),0)+isnull(datediff(mi,ClassUP2,ClassNext2),0)sj from #考勤表 )tgodrop table #考勤表/*-------------------------11.0000004.000000(2 行受影响)*/ 谢谢.晴天大牛的思路真不错.我还直接把字符串转成decimal型.select 1.0*sj/60 from这种思路真好.TSQL整型的运算结果永远是整型,晴天叫个1.0真是好到极点了.... 触发器 SQL Server 2000 急求一个简单的存储过程 创建视图问题~! 在win7下安装SQL Server 2008 是卡住不能往下进行显示正在发布程序集上下文 mysql新建用户疑惑 弱弱的问题,如何把现有的数据库复制到另外一台全新的机器上 sql server 2000 数据库服务器无法通过服务器名连接,只能通过ip连接 关于数据库索引的问题! 存储过程输入参数长度问题? 【求助】关于触发器有一个疑惑请帮忙解答 服务器IP地址改后 SQL SERVER Configuration manager 中 TCP/IP中IP地址不变化
还有第二列数据最后两列是空的.以空计算如果用case转的话.又算不出来了.
(number varchar(50),
ClassUP1 datetime ,ClassNext1 datetime,
ClassUP2 datetime,ClassNext2 datetime)
insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')
insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)
go
select ltrim(sj/60)+':'+ltrim(sj%60) from(
select datediff(mi,ClassUP1,ClassNext1)+datediff(mi,ClassUP2,ClassNext2)sj from #考勤表
)t
go
drop table #考勤表
/*-------------------------
11:0
NULL(2 行受影响)*/
create table #考勤表
(number varchar(50),
ClassUP1 datetime ,ClassNext1 datetime,
ClassUP2 datetime,ClassNext2 datetime)
insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')
insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)
go
select ltrim(sj/60)+':'+ltrim(sj%60) from(
select isnull(datediff(mi,ClassUP1,ClassNext1),0)+isnull(datediff(mi,ClassUP2,ClassNext2),0)sj from #考勤表
)t
go
drop table #考勤表
/*-------------------------
11:0
4:0(2 行受影响)*/
你转成了字符型,需要这个计算的结果与int型做判断的
如11.0>=9
可这样的话.我不能比较了
转一下了.但不知有什么影响没?
如果要的是小时的小数值,则:
create table #考勤表
(number varchar(50),
ClassUP1 datetime ,ClassNext1 datetime,
ClassUP2 datetime,ClassNext2 datetime)
insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')
insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)
go
select 1.0*sj/60 from(
select isnull(datediff(mi,ClassUP1,ClassNext1),0)+isnull(datediff(mi,ClassUP2,ClassNext2),0)sj from #考勤表
)t
go
drop table #考勤表
/*-------------------------
11.000000
4.000000(2 行受影响)
*/
我还直接把字符串转成decimal型.
select 1.0*sj/60 from这种思路真好.TSQL整型的运算结果永远是整型,晴天叫个1.0真是好到极点了....