代码之家  ›  专栏  ›  技术社区  ›  O P

获取数字的SQL正则表达式

  •  0
  • O P  · 技术社区  · 11 年前

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

    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 回复  |  直到 11 年前
        1
  •  1
  •   woemler    11 年前

    如果您只需要检查输入数字是否与开始或结束时间相匹配,您可以尝试:

    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
    

    或者如果你想尝试匹配实际 DATE 列,您可以尝试以下操作:

    select * from table where
    to_char(start, 'HH24') = input_string
    or to_char(end, 'HH24') = input_string
    
        2
  •  1
  •   Braj    11 年前

    你可以试试

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

    这里是 online demo

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

    示例查询

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

    看看