2017-06-16 345 views
1

我在數據庫表中有像hh:mm ss這樣的時間格式。 我寫了一個查詢來從列中獲取這些值。時間格式的正則表達式

declare @reg nvarchar(100) 
set @reg = '^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$' 
select time from table1 where time = @reg 

但是,它沒有顯示我的結果。如何獲得結果?

編輯: 的樣本數據(這裏是我想從科拉姆找一下):

23:36 26 
08:55 46 

這是我想在該列改變:

23:36:26 
08:55:46 
+0

請郵寄樣本數據和預期的結果... – Chanukya

+0

' SQL SERVER'不支持'正則表達式' –

+0

嘗試使用time LIKE reg而不是time = reg? – kendzi

回答

0

檢查this。看來SQL Server不支持純正則表達式,則必須將查詢更改爲類似這樣:

declare @reg nvarchar(100) 
set @reg = '[01][0-9]:[0-5][0-9]:[0-5][0-9]' 
select time from table1 where time like @reg 
1

的問題是,您使用的字符串,而不是合適的類型,time。唯一真正的解決方案是修復字段類型。

將數據轉換,你並不需要一個正則表達式,只是投放前用:更換,如:

select cast(replace(time,' ',':') as time) 

執行:

select cast(replace('08:55 46',' ',':') as time) 

返回08:55:46

時間值

您可能會試圖再次將time轉換爲使用相同命令的字符串,例如:cast(cast(replace(time,' ',':') as time) as nvarchar(8))但這不會解決錯誤的類型問題。每次你想把它發送到客戶端或執行時間算術時,你都會被迫再次解析文本。

如果你想用一個時間變量或時間參數,只需指定適當的類型,例如:

declare @myParam time ='23:12:34' 

或者

Create Procedure MyProc (@myTimeParam time) 
... 
+0

我在該列中(表格中)以這種格式有1M百萬次時間記錄。我如何通過硬編碼解決所有這些問題?時間格式類型爲char – AskMe

+0

感謝您的線索:更新DPUCID01 set time2 = replace(time2,'',':') WHERE time2 like'[0-9] [0-9]:[0-9 ] [0-9] [0-9] [0-9]' – AskMe