我有一個時間列的表,它是一個字串 [nvarchar(50)],具有以下值。
5:34 AM
4:06 PM
7:14 PM
10:25 PM
2:12 AM
在我的查詢中,我試圖按升序對各個行進行排序,但是因為它是一個字串,所以它按字母順序對其進行排序。
我可以在 ORDER 陳述句中使用一個函式來將字串轉換為時間或日期時間變數嗎?我嘗試過使用 CAST 和 CONVERT,但沒有成功。
CAST([Time] AS datetime)
Convert(nvarchar(50),[Time],101)
謝謝!
uj5u.com熱心網友回復:
您可以使用TRY_CONVERT()
按正確的型別進行排序(并避免進入表的垃圾錯誤):
DECLARE @BadDesign table(PoorChoice nvarchar(50));
INSERT @BadDesign(PoorChoice) VALUES
(N'5:34 AM'),
(N'4:06 PM'),
(N'7:14 PM'),
(N'10:25 PM'),
(N'2:12 AM'),
(N'??:00 PM');
SELECT PoorChoice, TRY_CONVERT(time, PoorChoice)
FROM @BadDesign
ORDER BY TRY_CONVERT(time, PoorChoice);
輸出:
可憐的選擇 | (無列名) |
---|---|
??:00 下午 | 空值 |
凌晨 2 點 12 分 | 02:12:00 |
上午 5 點 34 分 | 05:34:00 |
下午 4:06 | 16:06:00 |
晚上 7 點 14 分 | 19:14:00 |
晚上 10:25 | 22:25:00 |
- 示例db<>fiddle
請注意,垃圾資料排在最前面。如果你想過濾掉它:
WHERE TRY_CONVERT(time, PoorChoice) IS NULL
uj5u.com熱心網友回復:
只需嘗試將字串轉換為TIME
.
如果它是壞資料,則 TRY_CAST 回傳 NULL。
declare @test table (timestring nvarchar(8)); insert into @test values ('5:34 AM'), ('4:06 PM'), ('7:14 PM'), ('10:25 PM'), ('2:12 AM'); select * , try_cast(timestring as time(0)) from @test;
時間字串 (無列名) 上午 5 點 34 分 05:34:00 下午 4:06 16:06:00 晚上 7 點 14 分 19:14:00 晚上 10:25 22:25:00 凌晨 2 點 12 分 02:12:00
在這里測驗db<>fiddle
uj5u.com熱心網友回復:
以固定日期和空格作為時間前綴,即'01-01-1980'。然后,您將能夠轉換為日期時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443768.html
上一篇:帶有更改日期的CASE宣告