2016-11-01 26 views
6

Đây là lần đầu tiên tôi đặt câu hỏi ở đây, hãy tha thứ cho tôi nếu tôi phạm sai lầm nghiệp dư.Trình kích hoạt MYSQL: JSON_SEARCH một giá trị số nguyên trong một dãy số nguyên json

Tôi đang tìm cách sử dụng json_search để lấy đường dẫn mảng tương ứng với một giá trị.

Tôi đã cố gắng và làm việc này:

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

lợi nhuận $ [1];

Tôi đã thử và điều này không làm việc: (? Làm thế nào để làm cho công việc này)

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

lợi nhuận null;

Về cơ bản tôi muốn lưu trữ @j làm mảng nguyên thay vì mảng chuỗi cho mục đích lập chỉ mục. Có cách nào tôi có thể thay đổi mảng số nguyên thành một mảng chuỗi để so sánh nếu không có cách nào cho json_search để làm việc với các số nguyên?

Cảm ơn bạn đã nâng cao!

+0

Dường như lỗi này vẫn chưa được khắc phục: https://bugs.mysql.com/bug.php?id=79316 – RayCh

Trả lời

0

Tôi đã thử một phương pháp workaround, đó là CONCAT chuỗi và đưa nó trở lại JSON và cập nhật bảng. Nó không phải là cách thanh lịch nhất, vì vậy nếu các bạn có bất cứ đề nghị nào, xin vui lòng cho tôi biết! :)

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 

Cảm ơn!

0

Điều này dường như làm việc:

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

Đó là do thiết kế, mặc dù tôi không thể đồng ý với đội mySQL. Điều này nên được thực hiện.

https://bugs.mysql.com/bug.php?id=79233 [đóng]

Các đặc điểm kỹ thuật tại https://dev.mysql.com/worklog/task/?id=7909 nói: "Hàm này trả về đường dẫn (s) vào chuỗi cung cấp Các trở đường dẫn (s) xác định các thành viên đối tượng hoặc khe mảng mà là nhân vật. chuỗi. "

Vì vậy, có vẻ như ý định của chức năng này là tìm kiếm các chuỗi . Tài liệu cần được cập nhật để làm rõ rằng hàm là để tìm kiếm các chuỗi vô hướng, không phải cho các vô hướng trong chung.

Các vấn đề liên quan