2016-11-01 79 views
6

的JSON数组JSON_SEARCH一个整数值,这是我第一次问一个问题在这里,你原谅我,如果我做任何业余的错误。MYSQL触发器:在整数

我正在寻找使用json_search来获取对应于一个值的数组路径。

我试图和这个作品:

SET @j = '["3", "2", "1"]'; 
SELECT json_search(@j, 'one', '2'); 

返回$ [1];

我试图和这不起作用:(?如何使这项工作)

SET @j = '[3, 2, 1]'; 
SELECT json_search(@j, 'one', 2); 

则返回NULL;

基本上我想将@j存储为整数数组而不是字符串数组以用于索引目的。如果没有办法让json_search使用整数,有什么办法可以将整数数组更改为字符串数组进行比较?

在此先感谢!

+0

看起来像这个bug仍然没有被修复:https://bugs.mysql.com/bug.php?id = 79316 – RayCh

回答

0

我已经尝试了一种解决方法,即CONCAT字符串并将其转换回JSON并更新表。这不是最优雅的方式,所以如果你们有任何建议,请告诉我! :)

BEGIN 
DECLARE var1 INT default -2; //offsets 
DECLARE var2 INT default 2; //offsets 
SELECT StatusID into @statusList FROM UserStatusesIndex; 
SET @statusID_to_remove = OLD.StatusID; 
SET @startIndex = INSTR(@statusList, @statusID_to_remove); 
SET @charLength = CHAR_LENGTH(@statusID_to_remove); 

IF @startIndex <= 2 THEN SET var1=-1, var2=2; //If its the first index 
ELSEIF (CHAR_LENGTH(@statusList) - @startIndex <= 2) THEN SET var1=-3, var2=0; //If its the last index 
ELSE SET var1=-2, var2=2; 
END IF; 

SET @newJson=CAST(CONCAT(SUBSTRING(@statusList, 1, @startIndex+var1), SUBSTR(@statusList, @startIndex + @charLength+var2, CHAR_LENGTH(@statusList) - @startIndex - @charLength+2)) as JSON); 
UPDATE UserStatusesIndex SET [email protected] WHERE StatusCreator=OLD.StatusCreator; 
END 

谢谢!

0

这似乎工作:

SET @j = '[3, 2, 1]'; 
SELECT JSON_CONTAINS(@j, '3', '$'); 
1

它是由设计,虽然我不能与MySQL团队同意。这应该被执行。

https://bugs.mysql.com/bug.php?id=79233(闭合)

https://dev.mysql.com/worklog/task/?id=7909的规范说: “这个函数返回到给定的字符串的路径(多个)返回的 路径(一个或多个)识别对象成员或阵列插槽其是字符。 串。“

如此看来,这个功能的目的是为了寻找 字符串。应更新文档以阐明 函数用于搜索字符串标量,而不是 general中的标量。