mysql REPLACE函数对使用INNER JOIN的SELECT不起作用

w8rqjzmb  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(140)

我无法让REPLACE函数在这里显示的SQL命令上工作。我想让它接受我的搜索词(55512),并使用regexp中修改过的字段在字段中搜索它,以删除所有非字母数字字段。

SELECT 
  `Customers`.`id` AS `Customers__id`,
  `Contact`.`id` AS `Contact__id`, 
  `Contact`.`customer_id` AS `Contact__customer_id`, 
  `Contact`.`full_name` AS `Contact__full_name`, 
  `Contact`.`phones` AS `Contact__phones`
FROM 
  `customers` `Customers` 
  INNER JOIN `contacts` `Contact` ON `Contact`.`id` = (`Customers`.`contact_id`) 
WHERE 
  REPLACE(
    `Contact`.`phones`, "[^a-zA-Z0-9]", 
    ""
  ) LIKE '%55512%' 
LIMIT 
  20 OFFSET 0

因此,我想要做的是能够搜索“55512”,并在Contact. phones字段包含“999-555-1212”或“(999)555-1212”。Contact. phones字段存储为JSON数组,以防与此相关,但我希望上面的SQL命令删除所有括号,花括号等,然后搜索该字符串。
当我在MySQL中执行上述搜索时,它返回零个结果,但有一个结果包含:[{“数值”:“999-555-1212”,“标签”:“主要”}]

t98cgbkg

t98cgbkg1#

问题是REPLACE函数不能与regex一起工作,而是试图匹配字符串。
您可以通过两种方式解决此问题:

  • 采用REGEXP_REPLACE函数,有效使用正则表达式:
WHERE 
  REGEXP_REPLACE(
    `Contact`.`phones`, "[^a-zA-Z0-9]", 
    ""
  ) LIKE '%55512%'
  • 保留REPLACE函数,但仅使用空字符串替换破折号。
WHERE 
  REPLACE(
    `Contact`.`phones`, "-", 
    ""
  ) LIKE '%55512%'

检查here演示。

相关问题