如果我有一个名为numbers
的JSON列的MySQL表和该列(整数数组)中有[1, 2, 3]
的记录,如何更新该记录以删除{{1 (所以它变成2
)?
答案 0 :(得分:6)
我正在寻找自己的答案,并提出了这个问题,不想使用我继续搜索的对象。但是我找到了一个解决方案,您需要使用json_remove
和json_search
以下内容从表tbl
和列numbers
UPDATE tbl
SET numbers = JSON_REMOVE(
numbers, replace(json_search(numbers, 'one', 1), '"', '')
)
WHERE json_search(numbers, 'one', 1) IS NOT NULL
json_search
返回值所在的路径,即。 "$[0]"
replace
删除"
,否则json_remove
会发生错误json_remove
将从json_search
结果Et瞧,您的价值已被删除。
注意:这假定没有重复值
答案 1 :(得分:5)
在有人找到更好的解决方案之前,我只是将其转换为对象:update tbl set numbers = json_insert(`numbers`, '$."4"', 4);
。是的,这是更加丑陋并且占用更多的磁盘空间,但是您可以获得不必担心重复的好处。
添加数字:
update tbl set numbers = json_remove(`numbers`, '$."4"');
删除号码:
select * from tbl where json_contains_path(`numbers`, 'one', '$."4"');
获取具有特定数字的行:
public Dictionary<string, Dictionary<long, string>> getCustomFieldLists()
{
return
nsService.search(new CustomListSearch())
.recordList.Select(a => (CustomList) a)
.ToDictionary(a => a.internalId,
a => a.customValueList.customValue
.ToDictionary(b => b.valueId, c => c.value));
}
var valueLookup = getCustomFieldLists();
var results = searchResults.Select(a => new
{
Z = (a.basic.customFieldList.Where(b => b.scriptId == "custentityZ")
.Select(a => (SearchColumnSelectCustomField)a)
.Select(a => valueLookup[a.searchValue.typeId][a.searchValue.internalId])
.First()
}
答案 2 :(得分:0)
顺便说一句,
JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path]
...])
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-search
只是search_str