我正在转换一个sql服务器脚本,其中我需要在MYSQL中转换PATINDEX()。您能推荐一下哪个MYSQL函数类似于PATINDEX()
发布于 2016-07-12 10:35:37
虽然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发布于 2018-06-01 09:52:43
REGEXP_INSTR在功能上与PatIndex很接近,但您需要运行MySQL 8.0或更高版本才能使用它。
8.0于2018年4月发布。令人困惑的是,8.0之前发布的最后一个版本是5.7。维基百科explains why。
发布于 2019-07-19 04:10:24
这是我的解决方案:D
ORDER BY
CASE
WHEN instr([column], '[text]') > 0 THEN
instr([column], '[text]')
WHEN instr([column], '[text]') = 0 THEN
100(//large number) end ASC https://stackoverflow.com/questions/38315658
复制相似问题