我正在嘗試在 SQL 中創建一個關于音樂的表,它應該包含 SongDuration。這意味著我必須在表中保存分鐘:秒資訊。但我不知道該型別使用什么。我正在使用 SQL 服務器。
編輯:我想將資料庫用于 ASP.NET Core Web 應用程式。我使用的是像northwnd這樣的現成的SQL資料庫。現在,我正在嘗試創建一個。所以,我不會在 SQL 查詢中看到 SELECT 函式的計時。所以,我需要使用一些使它成為 mm:ss 的東西。有沒有一種我可以像那樣清除的型別?
create table musics(
songDuration type,
...)
uj5u.com熱心網友回復:
為什么不使用int?因此,您可以按照自己喜歡的方式計算持續時間。例如分鐘、小時等。
uj5u.com熱心網友回復:
我通過使用 int 列來做到這一點,并將秒數存盤在那里。
在您的客戶端中,您可以根據秒數計算天數、小時數、分鐘數和秒數,并根據需要顯示它。
要在 sql 中顯示它,您可以使用它例如
declare @seconds int = 350
select right('00' convert(varchar, datepart(hour, dateadd(s, @seconds, 0)) ((@seconds / 86400) * 24)), 2)
':' right('00' convert(varchar, datepart(minute, dateadd(s, @seconds, 0))), 2)
':' right('00' convert(varchar, datepart(second, dateadd(s, @seconds, 0))), 2)
這將顯示
00:05:50
即 0 小時 5 分 50 秒
如果秒的值大于一天,這將沒有問題。小時數只會更多
350000將顯示的值97:13:20
uj5u.com熱心網友回復:
有一個資料型別time將是合乎邏輯的選擇,它以 HH:mm:ss 格式存盤它,并根據您宣告的欄位大小確定可選的小數秒數(例如 time(3) 將其保留到小數點后三位)
如果您的源資料已經在此表示法中,則可以輕松地將其放入表中,并且按照您的預期進行簡單的排序/過濾操作。這樣做的缺點是,如果您想執行某些操作,例如 SUM 或 AVG(因為 a_horse_with_no_name 在他們的評論中指出)時間在技術上代表一個時間點而不是持續時間,您必須做一些像這樣的解決方法:
SELECT totalduration = SUM(DATEDIFF(SECOND, '0:00:00', duration))
FROM dbo.table
或者,您可以使用 int 在持續時間記憶體儲(例如)秒數,但是如果您還沒有該格式的資訊,則必須在插入資料時進行一些(輕)轉換,然后回傳如果要以 mm:ss 顯示
例如:
SELECT CONVERT(varchar, DATEADD(SECOND, durationinseconds, 0), 8) FROM dbo.table
這會將其轉換回 hh:mm:ss 格式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370193.html
標籤:sql sql-server
