2017-06-16 101 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