【问题标题】:MYSQL REGEX in Select query选择查询中的 MYSQL REGEX
【发布时间】:2019-11-25 15:59:56
【问题描述】:

需要一个正则表达式解决方案来仅从列中选择一个字符串模式。

数据如下所示:

Column1
Data Type = String 

Data = 
"130 - 66||109,118 - 3||102 - 18||109,118 - 2||109,116,149 - 14||141 - 8||130 - 31||102 - 12"

预期结果

66, 3, 18, 2, 14, 8, 31, 12

尝试了正则表达式 - "\-(...*?)\W",但它不起作用。

【问题讨论】:

  • SELECT VERSION(); 返回什么?
  • SELECT VERSION() = 8.0.16

标签: mysql regex syntax mysql-8.0


【解决方案1】:

MySQL REGEXP 返回一个布尔值,而不是字符串。

摘自 MySQL 参考手册:

如果字符串expr 与模式pat 指定的正则表达式匹配,则返回1,否则返回0。如果exprpatNULL,则返回值为NULL

也许我们想使用 MySQL REGEXP_REPLACE 函数?

参考:

https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp

https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace

【讨论】:

  • 谢谢斯宾塞,试过了,但它只是删除了'-'符号 select REGEXP_REPLACE('130 - 66||109,118 - 3||102 - 18||109,118 - 2||109,116,149 - 14| |141 - 8||130 - 31||102 - 12', '-','');输出 - 130 66||109,118 3||102 18||109,118 2||109,116,149 14||141 8||130 31||102 12
【解决方案2】:

你可以试试这个

SELECT REPLACE(REGEXP_REPLACE('130 - 66||109,118 - 3||102 - 18||109,118 - 2||109,116,149 - 14||141 - 8||130 - 31||102 - 12',
                                     '(([,0-9]+) - )', ''),'||',',');

结果

66,3,18,2,14,8,31,12

Referance

【讨论】:

  • 这行得通,Ferhat,如果我需要之前的值怎么办 - 比如 130, 109,118,102,109,118,109,116,149,141,130,102
  • 我不擅长正则表达式,但当我需要正则表达式时,我会在这个网站regex101.com 使用它并尝试一下
  • 只要用这个正则表达式 "(- [0-9]+)" 寻找其他人
  • 知道了,谢谢费哈特
猜你喜欢
  • 2021-11-19
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
相关资源
最近更新 更多