如何处理 DATEDIFF(MINUTE, '00:00', '24:20') 之类的场景?
How to Handle DATEDIFF(MINUTE, '00:00', '24:20') Like scenario?
我的Table里有一栏。我们在其中以格式 'HH:MM'
存储字符串值。在使用此 table 获取记录期间,一切正常
DATEDIFF(MINUTE, '00:00', ColumnName)
问题是当我们的值大于 23:59
时。
它显示错误
Conversion failed when converting date and/or time from character string.
任何人都可以建议我实现这种情况的正确方法。
试试这个
select DATEDIFF(MINUTE, '00:00', case when ISDATE(ColumnName)=0 then '00:00' else ColumnName end )
如果您将值存储为时间以外的其他值,为什么不只存储分钟数并转换为您想要输出的任何格式?
否则,我建议您将值转换为分钟:
select (cast(left(ColumnName, 2) as int) * 60 +
cast(right(ColumnName, 2) as int)
) as Minutes
如果您不使用 date/time 值,则不需要使用 专门 为它们设计的函数。
编辑:
要处理超过 99 小时,请使用 charindex()
:
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
我的Table里有一栏。我们在其中以格式 'HH:MM'
存储字符串值。在使用此 table 获取记录期间,一切正常
DATEDIFF(MINUTE, '00:00', ColumnName)
问题是当我们的值大于 23:59
时。
它显示错误
Conversion failed when converting date and/or time from character string.
任何人都可以建议我实现这种情况的正确方法。
试试这个
select DATEDIFF(MINUTE, '00:00', case when ISDATE(ColumnName)=0 then '00:00' else ColumnName end )
如果您将值存储为时间以外的其他值,为什么不只存储分钟数并转换为您想要输出的任何格式?
否则,我建议您将值转换为分钟:
select (cast(left(ColumnName, 2) as int) * 60 +
cast(right(ColumnName, 2) as int)
) as Minutes
如果您不使用 date/time 值,则不需要使用 专门 为它们设计的函数。
编辑:
要处理超过 99 小时,请使用 charindex()
:
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