mariadb 在MySQL 5.7.27上查找REGEXP_REPLACE()替代方法

35g0bw71  于 2022-11-08  发布在  Mysql
关注(0)|答案(3)|浏览(467)

我对我正在进行的一个项目(在MariaDB 10.1.37上)进行了查询:

SELECT * FROM table WHERE REGEXP_REPLACE(substring_index(product,' ',1), '[^a-zA-Z ]', '')='VALUE'

目标是:
1)从值选择部分到第一个空格:示例VALUE1 SOME OTHER以获取VALUE1
2)要删除数字和任何其他符号:示例VALUE1以获取VALUE
上面的查询可以根据需要完成任务!
问题是客户端有MySQL 5.7.27,我们知道REGEXP_REPLACE()来自8+版本的MySQL
目前还没有将客户端升级到MySQL 8+或迁移到MariaBD的选项,因此问题是我如何以及能否在
MySQL 5.7.27
中实现相同的结果?
我试图搜索并尝试WHERE substring_index(product,' ',1) REGEXP '^a-zA-Z' = 'VALUE',但REGEXP返回1或0,它不是什么为我工作,因为我需要的值。
有什么帮助吗?
提前感谢!

hmmo2u0o

hmmo2u0o1#

“我也一直在寻找解决方案,因为我的伙伴们使用的是MYSQL 5.5,因此他们也没有REGEXP_REPLACE()。
很容易在stackOverFlow上找到替换一个字符的解决方案,但无法找到替换字符串的解决方案,因此我创建了这段代码,它可以帮助某些人:

SET @string = 'I love shop it is a terrific shop, I love eveything about it';
SET @shop_code = 'shop';

SET @shop_date = CONCAT(@shop_code, '__', DATE_FORMAT(NOW(), '%Y_%m_%d__%Hh%im%ss'));

SET @part1 = SUBSTRING_INDEX(@string, @shop_code, 1);

SET @shop_nb = ROUND( (LENGTH(@string) - LENGTH(REPLACE(@string, @shop_code,''))) / LENGTH(@shop_code) );

SET @part2 = SUBSTRING_INDEX(@string, @shop_code, -@shop_nb);

SET @string = CONCAT(@part1, @shop_date, @part2);

SELECT @string;
nhaq1z21

nhaq1z212#

这不是一个最终的答案,如果有人有一个很好的或更接近的例子,我问,然后去吧,并张贴一个答案。我想看到它!
我所做的就是使用LIKE

SELECT * FROM table WHERE substring_index(product,' ',1) LIKE 'VALUE%'

我知道在某些情况下这可能会显示错误的数据,但对于我的需要,这种方式是可以接受的。

8qgya5xd

8qgya5xd3#

这在MySQL 5.7中有效...此示例将从URL的查询字符串中提取UTM_Source参数值:

case when url like '%utm_source%' then
       substring(
       url,
      locate('utm_source=',url)+char_length('utm_source='),
      case when locate('&',url,locate('utm_source=',url)) = 0 then char_length(url)+1 else locate('&',url,locate('utm_source=',url)) end - (locate('utm_source=',url)+char_length('utm_source=')) 
      ) else NULL end utm_source;

相关问题