Sql / PL / sql中的字符串模式匹配

时间:2018-11-20 09:18:31

标签: sql regex plsql

我需要将字符串与模式匹配以验证给定的字符串。

给定的字符串可能类似于1234/5678。

我应该以这样的方式验证字符串,即前四个字符和后四个字符必须是数字,并且必须用斜杠分隔。

如何在SQL或PL / SQL中执行此操作?

我尝试了不同的功能,例如REGEXP_LIKE,REGEXP_REPLACE,REGEXP_SUBSTR。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

如果使用的是oracle,则可以使用regexp_like https://www.techonthenet.com/oracle/regexp_like.php 如果您使用的是mysql regexp或rlike https://dev.mysql.com/doc/refman/5.5/en/regexp.html 对于sqlserver IsMatch() https://github.com/zzzprojects/Eval-SQL.NET/wiki/SQL-Server-Regex-%7C-Use-regular-expression-to-search,-replace-and-split-text-in-SQL#sql-regex---ismatch

ORACLE

SELECT * FROM T WHERE COL REGEXP_LIKE REGULAREXP

MYSQL

SELECT * FROM T WHERE COL RLIKE REGULAREXP

SELECT * FROM T WHERE COL REGEXP REGULAREXP

答案 1 :(得分:0)

样本表:

{"FirstValue":0.2,"SecondValue":30.8,"FourthValue":30.8}

答案 2 :(得分:0)

如果需要在PL / SQL中完成此操作(例如,您要验证用户输入,而不是表中的数据),则可以创建一个函数来执行验证,例如:

DECLARE
  v_str VARCHAR2(10);

  FUNCTION validate_string (in_str VARCHAR2) RETURN BOOLEAN
  IS
  BEGIN
    RETURN regexp_like(in_str, '\d{4}/\d{4}');
  END validate_string;

  PROCEDURE validation_output (in_str VARCHAR2)
  IS
  BEGIN
    IF validate_string (in_str => in_str) THEN
      dbms_output.put_line(in_str||': validated');
    ELSE
      dbms_output.put_line(in_str||': not validated');
    END IF;
  END validation_output;
BEGIN
  v_str := '1234/5678';
  validation_output (v_str);
  v_str := '12/5678';
  validation_output (v_str);
  v_str := NULL;
  validation_output (v_str);
END;
/

1234/5678: validated
12/5678: not validated
: not validated