[英]SQL Convert & Cast Nvarchar Time to a decimal
我正在處理遺留數據庫,需要將信息從一個數據庫解析到另一個數據庫,將其解析到新數據庫很容易,但首先我需要創建查詢以在遺留 MSSQL 數據庫中轉換和轉換以下內容:
WorkedHours(NVARCHAR(10))
為文本格式 07:30
我需要將其轉換為小數,即 7.5
我已經四處尋找答案,但找不到任何有效的方法,所以我想我會把它放在那里看看你們是否有任何想法
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
。)
這應該適用於 ms-sql 和示例字符串“1101:56”(1101h 和 56 分鍾)| 一般>24小時:
-- Take all hours before ":" and all Minutes (2 digits) after ":" and convert it to float.
select convert(decimal,left('1101:56',CHARINDEX(':','1101:56')-1))+convert(decimal,right('1101:56',2))/60;
-- with placeholder
select convert(decimal,left(time_str_from_table,CHARINDEX(':',time_str_from_table)-1))+convert(decimal,right(time_str_from_table,2))/60;
如果源表具有 NULL 值,則使用:
-- with placeholder
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);
沒有理由退出日期/時間類型。 只需做一些簡單的字符串解析:
cast(left(WorkedHours, 2) as int) + cast(right(WorkedHours, 2) as int) / 60.00
這對 24 小時或類似的東西沒有任何限制。 它只是假設冒號前有兩位數,冒號后有兩位數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.