将分钟超过60的字符串转换为time数据类型会导致错误

时间:2015-10-10 08:56:50

标签: sql-server sql-server-2008

Declare @Data Table (Working_Hours nvarchar(10));  datatable

insert into @Data (working_hours) select '0:10';   insertion values
insert into @Data (working_hours) select '1:90';
insert into @Data (working_hours) select '0:10';
insert into @Data (working_hours) select '0:10';

--select working_hours from @Data;  *this state work* 

--select @data as lion ; this state also work

select 
    convert(int, (datepart(hour, CONVERT(time, q1.working_hours)) * 60) +
                  DATEPART(MINUTE, CONVERT(time, q1.working_hours))) as lion 
from @Data q1;

导致转换错误 - 我想从nvarchar转换min,然后转换为int以计算sap报告中的sum

如何通过方式表达工作..

2 个答案:

答案 0 :(得分:0)

假设只有几小时和几分钟的数据问题(90分钟),你可以不使用time -datatype这样做,这当然不允许这样的时间:

select 
  convert(int, left(working_hours, charindex(':', working_hours)-1)) * 60 + 
  convert(int, substring(working_hours, charindex(':', working_hours)+1,10))
from
  @data

答案 1 :(得分:0)

适用于SQL Server 2012 +

<强> LiveDemo

WITH cte AS
(
  SELECT  [working_hours] =  REPLACE(q1.working_hours, ':', '.')
  FROM @Data q1
)
SELECT
  [lion] = PARSENAME(working_hours, 2) * 60 + PARSENAME(working_hours, 1)
FROM cte

您需要获得大块数据。因此,一种奇特的方法是使用PARSENAME