我的表中有一列,我们以'HH:MM'
的格式存储字符串值。在从这个表中获取记录时,一切工作都正常。
DATEDIFF(MINUTE, '00:00', ColumnName)
问题出现在当我们的值大于 23:59
时。
会显示以下错误:
将日期和/或时间从字符字符串转换失败。
有没有人能为我提供实现这种情况的正确方法。
我的表中有一列,我们以'HH:MM'
的格式存储字符串值。在从这个表中获取记录时,一切工作都正常。
DATEDIFF(MINUTE, '00:00', ColumnName)
问题出现在当我们的值大于 23:59
时。
会显示以下错误:
将日期和/或时间从字符字符串转换失败。
有没有人能为我提供实现这种情况的正确方法。
select (cast(left(ColumnName, 2) as int) * 60 +
cast(right(ColumnName, 2) as int)
) as Minutes
select (cast(left(ColumnName, charindex(':', ColumnName) - 1) as int) * 60 +
cast(right(ColumnName, 2) as int)
) as Minutes
DECLARE @yourTable TABLE (ColumnName VARCHAR(10));
INSERT INTO @yourTable
VALUES ('100:00'),
('24:20');
SELECT ColumnName,
(hr * 60) + minut AS time_period_in_minutes
FROM @yourTable
CROSS APPLY (SELECT CAST(SUBSTRING(ColumnName,0,CHARINDEX(':',ColumnName)) AS INT),
CAST(SUBSTRING(ColumnName,CHARINDEX(':',ColumnName) + 1,LEN(ColumnName)) AS INT)) CA(hr,minut)
结果:
ColumnName time_period_in_minutes
---------- ----------------------
100:00 6000
24:20 1460
试一下这个
select DATEDIFF(MINUTE, '00:00', case when ISDATE(ColumnName)=0 then '00:00' else ColumnName end )
'24:20'
这样的东西不能直接转换为TIME
或DateTime
。最好的方法可能是使用:
进行分割,然后将小时乘以60再加上分钟。 - ughaiint
数字(如果需要以分钟为粒度)。将其转换为hh:mm
字符串(或从这些字符串进行转换)作为用户界面(UI)的问题,而不是数据库(DB)的问题。 - Damien_The_Unbeliever