我在数据库表中有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
然而,它没有显示我的结果。如何获得结果?
编辑: 样本数据(这是我想从colum中找到的):
23:36 26
08:55 46
以下是我想在该专栏中更改的内容:
23:36:26
08:55:46
答案 0 :(得分: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)
...
答案 1 :(得分: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