如何從字串中分離并僅顯示 DateTime?
我有一列保存這些資料:
Comments
-----------------------------------------
Daniel reached the school by 9:25:00 alone
Breakfast was served by 10:17:27 in the morning
Reached back home late evening by 7:00:48
我用這個查詢來分隔時間:
(CONVERT(varchar(max), Comments, 108)) [Comments],
它回傳了相同的行。字串沒有被過濾
當我嘗試使用此陳述句時:
(CONVERT(TIME, Comments, 108)) [Comments],
我收到這個錯誤
從字串轉換日期和/或時間時轉換失敗。
我怎樣才能克服時間并獲得以下預期結果?
Comments
----------------------------------------
9:25:00
10:17:27
7:00:48
uj5u.com熱心網友回復:
使用 patindex,您可以找到時間模式。
select try_cast(substring(Comments, patindex('%[ 0-9][0-9]:[0-9][0-9]:[0-9][0-9]%', Comments), 8) as time(0)) CommentTime from your_table
評論時間 09:25:00 10:17:27 07:00:48
uj5u.com熱心網友回復:
您可以使用STRING_SPLIT和TRY_CONVERT。
SELECT Tbl.Comments, T.value
FROM Tbl CROSS APPLY STRING_SPLIT(Tbl.Comments,' ') As T
WHERE TRY_CONVERT(TIME, value) IS NOT NULL
對于不支持的版本,STRING_SPLIT同樣的邏輯可以使用 實作XML,因為已經有使用PATINDEX.
WITH cte AS (
SELECT Comments, CONVERT(XML, CONCAT('<n>',REPLACE(Comments,' ','</n><n>'),'</n>')) AS x
FROM Tbl)
SELECT cte.Comments, v.value('.','varchar(MAX)')
FROM cte CROSS APPLY x.nodes('/n') AS t(v)
WHERE TRY_CONVERT(TIME, v.value('.','varchar(MAX)')) IS NOT NULL
uj5u.com熱心網友回復:
ltrim(substring(comments, charindex(comments, ':') - 2, 8))
顯然,這假設總是有一個冒號,并且第一個冒號在時間元素內。它還假設所有時間都有前導空格并且長度為 7-8 個字符。根據您打算對此做什么,這ltrim()可能是不必要的。
這只是字串決議。我意識到這實際上并沒有轉換為時間值,因為不清楚 OP 在輸出中是否需要它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385384.html
