मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या कोई पंक्ति है जिसमें JSON सरणी के अंदर एक विशिष्ट दिनांक है
मान लीजिए कि मेरा डेटा इस तरह दिखता है:
तालिका अनुप्रयोग:
id | application_id | data
# Rows
1 | 1 | [{"data" : ["some", "data#1"], "date": "2016-04-21"}, {"data" : ["other", "data#1"], "date" : "2016-04-22"}]
2 | 2 | [{"data" : ["some", "data#2"], "date": "2016-04-21"}, {"data" : ["other", "data#2"], "date" : "2016-04-26"}]
3 | 1 | [{"data" : ["some", "data#3"], "date": "2016-04-22"}, {"data" : ["other", "data#3"], "date" : "2016-04-26"}]
4 | 3 | [{"data" : ["some", "data#4"], "date": "2016-04-26"}]
मैं उन सभी एप्लिकेशनों को कैसे प्राप्त कर सकता हूं जिनके डेटा में तारीख है '2016-04-26'
?
इसलिए मूल रूप से मैं यह कर सकता हूं:
select id, json_extract(`data`, "$[*].date") from applications
कौन सा रिटर्न:
1 | ["2016-04-21", "2016-04-22"]
2 | ["2016-04-21", "2016-04-26"]
3 | ["2016-04-22", "2016-04-26"]
4 | ["2016-04-26"]
लेकिन अगर मैं खंड json_extract
में उपयोग करने का प्रयास करता WHERE
हूं तो मैं इसका उपयोग केवल तभी कर सकता हूं जब मैं स्पष्ट रूप से सरणी के json_extract
मार्ग तर्क में कुंजी को बताऊं , जैसे:
select * from applications where json_extract(`data`, "$[0].date") = "2016-04-26"
जो सही तरीके से id 4 के साथ पंक्ति को लौटाता है।
लेकिन अगर मैं रास्ते में एक वाइल्डकार्ड का उपयोग करने की कोशिश करता हूं तो यह अब काम नहीं करता है:
select * from applications where json_extract(`data`, "$[*].date") = "2016-04-26"
इसे 2, 3, 4 पंक्तियों को वापस करना चाहिए।
मैंने कई अन्य विकल्पों / विविधताओं की कोशिश की, लेकिन मैं क्वेरी को सही ढंग से संरचना करने का कोई तरीका नहीं खोज सकता।
क्या MySQL JSON के वर्तमान कार्यान्वयन के साथ भी ऐसा कुछ संभव है?
data
, "$ [0] .date") अनुप्रयोगों से 'दिनांक' के रूप में, से- id, json_extract (data
, "$ [1] .date") अनुप्रयोगों से 'दिनांक' के रूप में, और सभी फ़िल्टर लागू करने के लिए आदि। और आईडी की सूची है