将包含json的字段中的数据保存到数据库的另一个字段

时间:2015-09-11 11:54:14

标签: mysql sql json regex

我有一个 MySQL 数据库,它有两个字段。第一个字段名为postValues,另一个字段名为username。用户名是null,用于我数据库的所有记录。

在字段postValues内,有一个JSON字符串。 在此JSON字符串中,可能有一个键username

{
    otherfields,
    "username": "George",
    otherfields
}

username也有可能不存在。

我需要SQL查询来检查数据库的每条记录,如果密钥username存在于JSON字符串中,如果存在,则将其保存到字段username的同一记录中。请注意,otherfields与每条记录不同,并且键username可能不在同一位置以从JSON字符串中获取substr。我想我需要一个正则表达式。

任何人都可以指导我。

1 个答案:

答案 0 :(得分:2)

在所有JSON数据只是一个字符串之后,您可以使用mysql来确定该值是否存在。所以,只要你知道字符串的结构就可以得到它。

以下是使用REGEXP的示例,但您也可以使用LIKE。

SELECT (CASE WHEN `postValues` REGEXP '"username":"([a-zA-Z0-9]+)"' THEN 'YES' ELSE 'NO' END) AS `hasUserName` FROM `table`;

您还可以使用mysql进行更新以将名称添加到其他列。这真的很复杂,但很有效。使用{"bla":123,"username":"Goerge","more":"abc"}

进行测试
UPDATE `table` SET `username`=(
  CASE WHEN `postValues` REGEXP '"username":"([a-zA-Z0-9]+)"' THEN
    (SUBSTRING_INDEX(REPLACE(REPLACE(`postValues`,SUBSTRING_INDEX(`postValues`,'"username":"',1),''), '"username":"', ''), '"', 1))
  ELSE NULL END
);