我正在處理舊資料庫,需要將資訊從一個資料庫決議到另一個資料庫,將其決議到新資料庫很容易,但首先我需要創建查詢以在舊 SQL Server 資料庫中轉換和轉換以下內容:
WorkedHours(NVARCHAR(10)) 是文本格式 07:30
我需要轉換并將其轉換為十進制,即 7.5
我四處尋找答案,但找不到任何有效的方法,所以我想我會把它放在那里看看你們是否有任何想法。
編輯 - 我應該問的是。嘗試將時間轉換為十進制時,是什么導致從值為 0 的字符轉換為 int 的錯誤?
uj5u.com熱心網友回復:
DATEDIFF(
MINUTE,
0,
CAST('07:30' AS TIME)
)
/
60.0
最多'23:59'只能作業
編輯:
根據其他地方的評論,您有一些“不好”的價值觀。
這可能會發現他們...
SELECT
*
FROM
yourTable
WHERE
TRY_CONVERT(TIME, worked_hours) IS NULL
因此,這是我表達的更安全版本......
DATEDIFF(
MINUTE,
0,
TRY_CONVERT(TIME, worked_hours)
)
/
60.0
(回傳NULL決議失敗的值。)
uj5u.com熱心網友回復:
沒有理由洗掉日期/時間型別。只需做一些簡單的字串決議:
cast(left(right('0' WorkedHours, 5), 2) as int)
cast(right(WorkedHours, 2) as int) / 60.00
這不會對 24 小時或類似時間有任何限制。它只是假設您在冒號前有一個或兩個數字,在冒號后有兩個數字。
uj5u.com熱心網友回復:
這應該適用于 SQL Server 和示例字串“1101:56”(1101 小時和 56 分鐘)| 通常從 0h 到 >24h:
-- Take all hours before ":" and all Minutes (2 digits) after ":" and convert it to decimal.
select convert(decimal,left('1101:56',CHARINDEX(':','1101:56')-1)) ( convert(decimal,right('1101:56',2))/60 );
-- with column-placeholder "time_str_from_table"
select convert(decimal,left(time_str_from_table,CHARINDEX(':',time_str_from_table)-1)) ( convert(decimal,right(time_str_from_table,2))/60 );
如果源表具有 NULL 值,則使用帶有替換值“0.0”的“ISNULL”:
-- with column-placeholder "time_str_from_table"
select isnull( ( convert(decimal,left(time_str_from_table,CHARINDEX(':',time_str_from_table)-1)) ( convert(decimal,right(time_str_from_table,2))/60) ), 0.0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/377488.html
標籤:sql sql-server 查询语句
