SQL中的数据不是正确的日期格式,如何将其更改为正确的格式?

时间:2015-08-20 18:43:29

标签: sql sql-server

我有一个名为ProcessTimeOnHold的列,显示我们处理订单需要多长时间。

处理时间少于24小时的任何订单都以此格式HH:MM:SS显示。据我所知,这些数据采用正确的日期格式,但任何超过24小时的订单都会以这种格式显示D.HH:MM:SS因此,如果订单需要29小时34分钟,它将显示为{ {1}}。

我遇到的问题是,如果我尝试将数据转换或操作为例如几分钟,那么正确数据格式的订单将会起作用,但24小时后的任何内容都会返回错误。

例如,如果我尝试使用此转换为分钟:

1.05:34:00

它将所有订单转换为分钟,直到它遇到LTRIM(DATEDIFF(MINUTE, 0, ProcessTimeOnHold)) 格式的订单,然后它将返回此错误:

  

错误消息:转换日期时间时转换失败   字符串

我可以将整个专栏改为日期时间吗?

3 个答案:

答案 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)