PATINDEX() replacement in MYSQL

时间:2016-07-11 20:27:43

标签: mysql sql sql-server database

i am converting a sql server script where i need to convert PATINDEX() in MYSQL. would you please suggest which MYSQL function is similar to PATINDEX()

3 个答案:

答案 0 :(得分:1)

虽然MySQL中没有正式PATINDEX()函数可以实现带有返回字符索引的正则表达式模式查找,或LOCATE()REGEXP()的组合,但请考虑用户定义函数循环遍历字符串长度中的每个字符,并检查字符上的REGEXP模式。创建后,在查询中使用这样的函数。

DROP FUNCTION IF EXISTS PatIndex;

DELIMITER $$

CREATE FUNCTION PatIndex(pattern VARCHAR(255), tblString VARCHAR(255)) RETURNS INTEGER
    DETERMINISTIC
BEGIN

    DECLARE i INTEGER;
    SET i = 1;

    myloop: WHILE (i <= LENGTH(tblString)) DO

        IF SUBSTRING(tblString, i, 1) REGEXP pattern THEN
            RETURN(i);
            LEAVE myloop;        
        END IF;    

        SET i = i + 1;

    END WHILE; 

    RETURN(0);

END

查询(搜索字符串中的第一个数字)

SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
FROM myTable

答案 1 :(得分:0)

REGEXP_INSTR与PatIndex的功能相近,但您需要运行MySQL 8.0或更高版本才能使用它。

8.0于2018年4月发布。令人困惑的是,8.0之前发布的最后一个版本是5.7。维基百科explains why

答案 2 :(得分:0)

这是我的解决方法:D

当INSTR([column],'[text]')> 0 THEN时按个案排序当INSTR([column],'[text]')= 0 THEN时100(//大号)END ASC