簡體   English   中英

SQL 將 Nvarchar 時間轉換為小數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM