首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL中的PATINDEX()替换

MYSQL中的PATINDEX()替换
EN

Stack Overflow用户
提问于 2016-07-12 04:27:43
回答 3查看 13.3K关注 0票数 2

我正在转换一个sql服务器脚本,其中我需要在MYSQL中转换PATINDEX()。您能推荐一下哪个MYSQL函数类似于PATINDEX()

EN

回答 3

Stack Overflow用户

发布于 2016-07-12 10:35:37

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
FROM myTable
票数 1
EN

Stack Overflow用户

发布于 2018-06-01 09:52:43

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

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

票数 1
EN

Stack Overflow用户

发布于 2019-07-19 04:10:24

这是我的解决方案:D

代码语言:javascript
复制
ORDER BY
CASE
WHEN instr([column], '[text]') > 0 THEN
  instr([column], '[text]')
WHEN instr([column], '[text]') = 0 THEN
  100(//large number) end ASC 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38315658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档