当前位置: 代码迷 >> Sql Server >> nvarchar类型的时间字段如何做减法
  详细解决方案

nvarchar类型的时间字段如何做减法

热度:98   发布时间:2016-04-24 09:26:47.0
nvarchar类型的时间字段怎么做减法
表中的STime字段是nvarchar类型的  我转换成float后能做减法了  但这样的话算出来的数据是不正确的
   SELECT LOG_ID,FuncNO,MAX(Convert(float,STime))-MIN(Convert(float,STime)) Time1
      FROM ta_TLog
  GROUP BY LOG_ID,FuncNO

比如以下2行数据17:00:02,015  减16:59:55,031 算出来之后是4046984就不对了,要怎么做才能算出正确的时间值呢

LOG_ID               FuncNO                      SDate                STime
9A2E59F1         MemberInput             20141222       165955031
9A2E59F1         MemberInput             20141222       170002015


------解决思路----------------------
转换成yyyy-mm-dd这样的格式,然后用datediff函数进行日期运算,另外,目前没发现有什么地方需要用nvarchar/nchar类型来存储日期的
------解决思路----------------------
use master
go
if OBJECT_ID('time1') is not null
drop table time1

create table time1(
                   loG_id varchar(20),
                   funcNO varchar(20),
                   SDate varchar(20),
                   STime varchar(20)
                   )
insert into time1
select '9A2E59F1','MemberInput','20141222','165955031' 
union all
select '9A2E59F1','MemberInput','20141222','170002015' 
go

select log_id,funcno,max(cast(left(stime,2)+':'+SUBSTRING(stime,3,2)+':'+SUBSTRING(stime,5,2)+'.'+RIGHT(stime,3) AS datetime))-
min(cast(left(stime,2)+':'+SUBSTRING(stime,3,2)+':'+SUBSTRING(stime,5,2)+'.'+RIGHT(stime,3) AS datetime))
from time1 group by log_id,funcno
  相关解决方案