【问题标题】:MySQL Select regular expression pattern to get value in json stringMySQL选择正则表达式模式以获取json字符串中的值
【发布时间】:2017-02-20 21:17:42
【问题描述】:

我需要一些关于 MySQL REGEX_REPLACE 模式的帮助。我想获取 json 字符串的第一个值:

[{"lbl":"mobile","val":"987 654 321"},
{"lbl":"home","val":"123 456 789"}]

SELECT REGEX_REPLACE(`phones`, PATTERN, '') FROM table;

那么,我想得到的是 987 654 321,什么模式可以完成这项工作?

【问题讨论】:

  • 你用的是什么版本?在以后的版本中,有 JSON 函数可以完全满足您的需求。
  • 你能举个例子吗?
  • 如果val有自己的专栏,那么你就只是SELECT val FROM table;有时间使用JSON;我不认为这是其中之一。

标签: mysql json regex select


【解决方案1】:

使用SUBSTRINGLOCATE函数的扩展解决方案:

SELECT 
    SUBSTRING(chain,
        LOCATE('"val":"', phones) + 7,  -- considering offset as starting position for the final substring
        LOCATE('"}', phones, LOCATE('"val":"', phones)) - (LOCATE('"val":"', phones) + 7)) AS phone
FROM
    table

'"val":"' 占用 7 个字符,电话号码 值应以LOCATE('"val":"', phones) + 7 开头

【讨论】:

  • 嗯,这还不错,但它不适用于所有记录。实际上我不明白为什么,因为它应该。即:这个值 [{"lbl":"","val":" 944 606\u00a08##"}] ,返回 [{
  • @spacebiker,明白了。这是因为在您的新示例中,第一个 SUBSTRING_INDEX 在偏移量 -2 处找不到 '"val":"'
  • 我明白了,这就是我要求正则表达式的原因,我们不知道 json 中的确切行数,我需要找到另一个解决方案,但是,您的解决方案给了我一些想法..
  • 我还有一些其他想法,但需要您详细说明:是否总是静态电话长度987 654 321 - 九个数字?
  • 你就是男人!我正在尝试类似的东西,但你的解决方案就像一个魅力..
猜你喜欢
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
相关资源
最近更新 更多