我有一个 MySQL 数据库,它有两个字段。第一个字段名为postValues
,另一个字段名为username
。用户名是null
,用于我数据库的所有记录。
在字段postValues
内,有一个JSON字符串。
在此JSON字符串中,可能有一个键username
。
{
otherfields,
"username": "George",
otherfields
}
username
也有可能不存在。
我需要SQL
查询来检查数据库的每条记录,如果密钥username
存在于JSON字符串中,如果存在,则将其保存到字段username
的同一记录中。请注意,otherfields
与每条记录不同,并且键username
可能不在同一位置以从JSON字符串中获取substr。我想我需要一个正则表达式。
任何人都可以指导我。
答案 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
);