获取数字的SQL正则表达式

获取数字的SQL正则表达式,sql,regex,oracle,plsql,Sql,Regex,Oracle,Plsql,我的数据库中有以下时间字段: 0400 - 0530 0430 - 0530 0930 - 1050 1000 - 1130 1400 - 1450 用户可以输入2个字符作为开始时间04将返回: 0400 - 0530 0430 - 0530 我目前使用一个检查来获取开始时间:to_char(a.time,'hh24') 我希望能够修改这个,所以我实际上得到了这个范围内的时间。例如,10将返回: 1000 - 1130 我需要它返回: 0930 - 1050 1000 - 1050 我的

我的数据库中有以下时间字段:

0400 - 0530
0430 - 0530
0930 - 1050
1000 - 1130
1400 - 1450
用户可以输入2个字符作为开始时间<代码>04将返回:

0400 - 0530
0430 - 0530
我目前使用一个检查来获取开始时间:
to_char(a.time,'hh24')

我希望能够修改这个,所以我实际上得到了这个范围内的时间。例如,
10
将返回:

1000 - 1130
我需要它返回:

0930 - 1050
1000 - 1050
我的想法是使用正则表达式来获取
-
之后的2位数字。我怎样才能做到这一点呢?

你可以试试

^(\d{4} - 10\d{2}|10\d{2} - \d{4})$
这是

如果不支持,请使用
[0-9]
代替
\d

示例查询

WHERE REGEXP_LIKE(column_name, '^(\d{4} - 10\d{2}|10\d{2} - \d{4})$')

看看


如果您只需要检查输入数字(看起来它们代表时间的小时部分)是否与开始或结束小时相匹配,您可以尝试:

select * from table where
regexp_substr(time_string, '^\d\d') = input_string
or regexp_replace(regexp_substr(time_string, '-\s*\d\d'), '-\s*', '') = input_string
或者,如果您想尝试匹配实际的
日期
列,您可以尝试以下操作:

select * from table where
to_char(start, 'HH24') = input_string
or to_char(end, 'HH24') = input_string

您使用的是哪种RDBMS?我使用的是Oracle。不确定为什么有人删除了这些标记。这些时间实际上是存储为
DATE
值,还是存储为您在上面表示的字符串?字符串。(char11)它是一个自定义字段,基于两个时间字段
start
end
,其值类似于
3:30:00.000000 pm