我的表中有一列。我們在其中存儲字符串值格式'HH:MM'
.During取記錄與此表中的每一件事工程確定與如何處理DATEDIFF(MINUTE,'00:00','24:20')像情景一樣?
DATEDIFF(MINUTE, '00:00', ColumnName)
問題是,當我們的價值比23:59
更大。 其顯示錯誤,如
轉換日期和/或時間從字符串轉換失敗。
有人可以建議我實現這種情況的正確方法。
我的表中有一列。我們在其中存儲字符串值格式'HH:MM'
.During取記錄與此表中的每一件事工程確定與如何處理DATEDIFF(MINUTE,'00:00','24:20')像情景一樣?
DATEDIFF(MINUTE, '00:00', ColumnName)
問題是,當我們的價值比23:59
更大。 其顯示錯誤,如
轉換日期和/或時間從字符串轉換失敗。
有人可以建議我實現這種情況的正確方法。
所以,它聽起來就像你節省了時間週期的長度。嘗試在幾分鐘內存儲它。我的查詢可以處理不同長度的數字,因爲它基於冒號。
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)
如果要存儲的值大於時間以外的東西,爲什麼不只是存儲的分鐘數和任何格式你想在輸出轉換爲?
否則,我會建議你只需將值轉換爲分鐘:如果你不使用的日期/時間值
select (cast(left(ColumnName, 2) as int) * 60 +
cast(right(ColumnName, 2) as int)
) as Minutes
,存在一種使用爲他們設計的功能專門沒有要求。
編輯:
爲了處理時間比99長,使用charindex()
:
select (cast(left(ColumnName, charindex(':', ColumnName) - 1) as int) * 60 +
cast(right(ColumnName, 2) as int)
) as Minutes
它被失敗的情況下,當我們有「100:00」。。。像值 –
@AshishBisht見編輯它現在應該工作 –
正確的做法是使用適當的數據類型。 –
你使用哪種rdbms? – ughai
實際上,我們必須保存大於'23:59'的值,以便我們將數據類型作爲Varchar。 –