【发布时间】:2017-03-20 03:11:37
【问题描述】:
如果我的行有一个 varchar 具有以下值:“[1,2,3]”,如果我需要该值包含其中一个数字(2 或 3),我该如何选择整行?
【问题讨论】:
-
您可以使用正则表达式。但最好的解决方案是规范您的表格设计,这样一开始就没有这样的值。
-
查看我的另一个answer。这会有所帮助
如果我的行有一个 varchar 具有以下值:“[1,2,3]”,如果我需要该值包含其中一个数字(2 或 3),我该如何选择整行?
【问题讨论】:
如您所说,您使用的是 MySQL 5.6,因此 JSON_EXTRACT() 函数不可用。
我推荐的唯一选项是:
升级到 MySQL 5.7
将整个 JSON 文档提取到应用程序中并使用 JSON 解码函数。
您也可以尝试使用其他 string functions available in MySQL 5.6 解析 JSON,但开发起来会很麻烦且耗时。
【讨论】:
json_extract 不可用(因此标题)。我正在寻找更多 like '%2%' 等效项(或适当的正则表达式)来帮助我匹配行。
你可以在sql中创建函数
DELIMITER $$
DROP FUNCTION IF EXISTS `json_extract_c`$$
CREATE FUNCTION `json_extract_c`(
details TEXT,
required_field VARCHAR (255)
) RETURNS TEXT CHARSET latin1
BEGIN
SET details = SUBSTRING_INDEX(details, "{", -1);
SET details = SUBSTRING_INDEX(details, "}", 1);
RETURN TRIM(
BOTH '"' FROM SUBSTRING_INDEX(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
details,
CONCAT(
'"',
SUBSTRING_INDEX(required_field,'$.', - 1),
'":'
),
- 1
),
',"',
1
),
':',
-1
)
) ;
END$$
DELIMITER ;
【讨论】:
因为我需要 mysql 5.6 上的 JSON_EXTRACT,所以我自己编写了一个原始函数的副本,可以像 mysql 5.7 中的本机函数一样提取值
【讨论】: