我有一个名为ProcessTimeOnHold的列,显示我们处理订单需要多长时间。
处理时间少于24小时的任何订单都以此格式HH:MM:SS
显示。据我所知,这些数据采用正确的日期格式,但任何超过24小时的订单都会以这种格式显示D.HH:MM:SS
因此,如果订单需要29小时34分钟,它将显示为{ {1}}。
我遇到的问题是,如果我尝试将数据转换或操作为例如几分钟,那么正确数据格式的订单将会起作用,但24小时后的任何内容都会返回错误。
例如,如果我尝试使用此转换为分钟:
1.05:34:00
它将所有订单转换为分钟,直到它遇到LTRIM(DATEDIFF(MINUTE, 0, ProcessTimeOnHold))
格式的订单,然后它将返回此错误:
错误消息:转换日期时间时转换失败 字符串
我可以将整个专栏改为日期时间吗?
答案 0 :(得分:0)
您可能想要搜索一个不太详细的解决方案,但这是一个选项,使用字符串操作:
SELECT DATEDIFF(MINUTE, 0, (convert(time,RIGHT(ProcessTimeOnHold,8)))) +
(case when ProcessTimeOnHold like '%.%'
then
(cast((LEFT(ProcessTimeOnHold,CHARINDEX(ProcessTimeOnHold,'.')-1)) AS INT) * 24 * 60)
else 0 end) as TotalMinutes
答案 1 :(得分:0)
(根据评论编辑)
这是一种获取会议记录的方法:
declare @table table (ProcessTimeOnHold varchar(16));
insert @table (ProcessTimeOnHold)
values ('00:20:00')
, ('01:20:00')
, ('1.05:34:00');
select ProcessTimeOnHold
, datediff(minute,0,right(ProcessTimeOnHold,8))
+ isnull(nullif(replace(left(ProcessTimeOnHold,charindex('.',ProcessTimeOnHold)),'.',''),''),0) * 1440 'Minutes'
from @table
RETURNS:
ProcessTimeOnHold Minutes
----------------- -----------
00:20:00 20
01:20:00 80
1.05:34:00 1774
答案 2 :(得分:0)
试试这个 - ANSI格式:2006.10.23 SELECT [ANSI] = CONVERT(char,CURRENT_TIMESTAMP,102)