2016-11-01 37 views
6

To jest mój pierwszy raz zadając pytanie tutaj, wybacz mi, jeśli popełnię błędy amatorskie.Wyzwalacze MYSQL: JSON_SEARCH wartość całkowita w tablicy json z liczb całkowitych

Szukam użyć json_search, aby uzyskać ścieżkę tablicy, która odpowiada wartości.

próbowałem i to działa:

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

zwraca $ [1];

próbowałem i to nie działa: (? W jaki sposób dokonać tej pracy)

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

zwraca NULL;

Zasadniczo chcę zapisać @j jako tablicę całkowitą zamiast tablicy ciągów do celów indeksowania. Czy jest jakiś sposób zmienić tablicę całkowitą w tablicę ciągów dla porównania, jeśli nie ma sposobu, aby json_search działało z liczbami całkowitymi?

Z góry dziękuję!

+0

Wygląda na to, że ten błąd nie został naprawiony: https://bugs.mysql.com/bug.php?id=79316 – RayCh

Odpowiedz

0

Próbowałem metody obejścia problemu, która polega na CONCAT ciąg i przesyła go z powrotem do JSON i aktualizacji tabeli. Nie jest to najbardziej elegancki sposób, więc jeśli macie jakieś sugestie, proszę dać mi znać! :)

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 

Dzięki!

0

To wydaje się działać:

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

To jest zgodne z projektem, chociaż nie mogę zgodzić się z zespołem MySQL. To powinno zostać wdrożone.

https://bugs.mysql.com/bug.php?id=79233 [zamknięty]

Specyfikacja w https://dev.mysql.com/worklog/task/?id=7909 mówi „Funkcja powrót drogą (i) do danego łańcucha Zwrócona ścieżkę (ów) określać elementy obiektów lub szczeliny układu, które mają charakter. ciągi. "

Tak więc wydaje się, że intencją tej funkcji było wyszukiwanie ciągów znaków . Dokumentacja powinna zostać zaktualizowana, aby wyjaśnić, że funkcja służy do wyszukiwania skalarów ciągów, a nie do skalarów w generatorze .