使用正则表达式删除Mysql中列值中的括号()
Posted
技术标签:
【中文标题】使用正则表达式删除Mysql中列值中的括号()【英文标题】:Delete the Parenthesis () in column value in Mysql using regex [duplicate] 【发布时间】:2017-11-27 12:22:21 【问题描述】:请查找示例列值:
`pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value should remove)`
expected output is: pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18`
我尝试了示例正则表达式代码删除空格后的字符
select REGEXP_EXTRACT("pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value should remove)",r(.*) ') as ptr ;
我得到了预期的输出,但是对于其他列值具有的值却失败了:
`(pffhjdhfjdhjhfjdhjfd:etr ptr) -- output getting (pffhjdhfjdhjhfjdhjfd:etr`
我该如何解决这个问题?请帮帮我
【问题讨论】:
我怀疑你正在使用 mysql.. MySQL 没有 REGEXP_EXTRACT 函数.. @RaymondNijland 我正在使用 Biq 查询,它具有 REGEXP_EXTRACT 功能。如果我们能够在 MYSQL 中解决这个问题。我会在 BQ 中重现它 @Fran 删除电话号码中的括号对我不起作用。因为字段值可能包含许多括号,我的要求是删除字符串末尾的 () 值 试试r'\s*\([^)]*\)$'
问题并没有说它只需要从开头和结尾删除括号,但在字符串中保留其他括号。您也应该将其添加到问题中。最好使用另一个示例字符串值:(example()text)
预期:example()text
,假设是这种情况。
【参考方案1】:
如果你只想从字符串中删除最后一组括号,你可以使用 REGEXP_REPLACE:
WITH
test_data AS (
SELECT
["pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value should remove)",
"pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18",
"pjdjshjvsdhsjhdvsjhd:m[jdsjshdjs]/6000.18 (this value stays) (this value should remove)"] AS s )
SELECT
REGEXP_REPLACE(t ,r'([^(]*)$', '') AS ptr FROM test_data JOIN UNNEST(test_data.s) as t
【讨论】:
以上是关于使用正则表达式删除Mysql中列值中的括号()的主要内容,如果未能解决你的问题,请参考以下文章