我有一个 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/