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

标签 mysql sql json regex

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

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

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

也有可能用户名不存在。

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

谁能指导我。

最佳答案

你可以用mysql来判断这个值是否存在,毕竟JSON数据只是一个字符串。所以只要知道字符串的结构就可以搞定。

这是一个使用 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
);

关于mysql - 将包含json的字段中的数据保存到数据库的另一个字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32522914/

相关文章:

mysql - 如何最好地合并四个大表

java - 如何使用 java SQL 连接器连接到不同计算机上的数据库

php - 用户注册时创建 MySQL 表

MySQL : Initialize mySql variable inside a query

插入 JSON 对象时 Python pymysql 语法错误

javascript - 在浏览器中查看 JSON 文件

java - Spark 获取嵌套 json 的列名

mysql - apache 使用哪些端口

mysql - SQL根据if结果不同查询

sql - 缺少表的 FROM 子句条目