2017-06-15 24 views
0

我期待下面的MySQL代碼:JSON_EXTRACT作爲值的INSERT INTO?

SET @json= '{"1":{"name":"Name","value":"James Bowery","id":1,"type":"name","first":"James","middle":"","last":"Bowery"},"2":{"name":"Birthdate","value":"06\/23\/2017","id":2,"type":"date-time","date":"06\/23\/2017","time":"","unix":1498176000},"3":{"name":"Gender","value":"Male","value_raw":"Male","id":3,"type":"radio"},"4":{"name":"Ethnicity","value":"European","value_raw":"European","id":4,"type":"radio"},"5":{"name":"Email","value":"[email protected]","id":5,"type":"text"}}'; 
SET @array = JSON_EXTRACT(@json, '$."1".first','$."1".last','$."5".value','$."2".value','$."3".value','$."4".value'); 
INSERT INTO user (firstname,lastname,birthdate,gender,ethnicity,email) VALUES (@array); 

要插入行從JSON中提取的命名字段填充user表。但是,INSERT會產生語法錯誤。什麼是正確的語法?

+0

是否'@ array'具有預期值? – Ravi

+0

'@ array'的值爲'[「James」,「Bowery」,「06/23/2017」,「Male」,「European」,「[email protected]」]'如果這回答您的問題。 – user3673

回答

0

也許試試這個。請注意,我已將日期格式更改爲yyyy-MM-dd。您將需要努力將此編程轉換爲適合MySQL。另外,當我運行這個時,數組在出生日期之前有電子郵件,所以我改變了插入的順序。

SET @json= '{"1":{"name":"Name","value":"James Bowery","id":1,"type":"name","first":"James","middle":"","last":"Bowery"},"2":{"name":"Birthdate","value":"06\/23\/2017","id":2,"type":"date-time","date":"2017-06-23","time":"","unix":1498176000},"3":{"name":"Gender","value":"Male","value_raw":"Male","id":3,"type":"radio"},"4":{"name":"Ethnicity","value":"European","value_raw":"European","id":4,"type":"radio"},"5":{"name":"Email","value":"[email protected]","id":5,"type":"text"}}'; 
SET @array = JSON_EXTRACT(@json, '$."1".first','$."1".last','$."5".value','$."2".value','$."3".value','$."4".value'); 
SET @queryString= CONCAT('INSERT INTO user (firstname,lastname,email,birthdate,gender,ethnicity) VALUES (',REPLACE(REPLACE(@array, '[',''),']',''),')'); 
PREPARE stmt FROM @queryString; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

'#1064 - 你的SQL語法有錯誤;請檢查與您的MariaDB服務器版本相對應的手冊,以在'[「James」,「Bowery」,「06/23/2017」,「Male」,「European」,「[email protected]」在第1行' – user3673

+0

查看更新的查詢 –

+0

我會接受的,儘管我最終爲每個字段做了一個'JSON_EXTRACT',因爲它們每個都需要不同的字符串操作和函數調用。例如,日期轉換等。我發現'JSON_EXTRACT'生成JSON而不是真正將這些值提取到SQL空間是很奇怪的。 – user3673