मैं 9.6 पोस्टग्रेट्स में काम कर रहा हूं और अभी भी अपने सिर को जसन के आसपास पा रहा हूं
मेरे पास एक json ऑब्जेक्ट वाला एक कॉलम है जो संख्याओं की एक सरणी है जो पुनरावृत्ति आवृत्ति और सप्ताह के दिनों का प्रतिनिधित्व करता है।
{"every":"1","weekdays":["1"]}
{"every":"1","weekdays":["1","3"]}
{"every":"1","weekdays":["1","2","3","4","5"]}
ROW1 -[1] : MON
ROW2 -[1,3] : MON , WED
ROW3 -[1,2,3,4,5] : MON , TUE , WED , THU , FRI
मैं इन्हें ऐसे कॉलम में विस्तारित करना चाहता हूं:
|ROW- |MON | TUE| WED|THU|FRI|
------------------------------
|ROW1 |Y |N |N |N |N |
|ROW2 |Y |N |Y |N |N |
|ROW3 |Y |Y |Y |Y |Y |
मैं तत्वों का उपयोग कर प्राप्त कर सकता हूं jsonb_array_elements(pattern)
लेकिन फिर क्या?
मैंने प्रत्येक कॉलम बनाने के लिए "समाहित" अभिव्यक्ति का उपयोग करने के लिए सोचा
pattern @> "{1}"
, pattern @> "{2}"
आदि, लेकिन मैं एक ऐसी वस्तु का निर्माण नहीं कर सका, जो एक हिट दे
उत्तर:
जवाब के लिए 2 № 1उदाहरण डेटा:
create table my_table(id serial primary key, pattern jsonb);
insert into my_table (pattern) values
("{"weekdays": [1]}"),
("{"weekdays": [1, 3]}"),
("{"weekdays": [1, 2, 3, 4, 5]}");
आप इस तरह से ऑपरेटर @ का उपयोग कर सकते हैं:
select
id,
pattern->"weekdays" @> "[1]" as mon,
pattern->"weekdays" @> "[2]" as tue,
pattern->"weekdays" @> "[3]" as wed,
pattern->"weekdays" @> "[4]" as thu,
pattern->"weekdays" @> "[5]" as fri
from my_table
id | mon | tue | wed | thu | fri
----+-----+-----+-----+-----+-----
1 | t | f | f | f | f
2 | t | f | t | f | f
3 | t | t | t | t | t
(3 rows)
जवाब के लिए 0 № 2
ऐसा लगता है कि मैं "शामिल" के साथ सही रास्ते पर था, लेकिन मैंने खुद को उलझन में था कि सरणी में क्या था। मुझे एक संख्या नहीं एक स्ट्रिंग की तलाश करनी चाहिए थी
, bookings.pattern->"weekdays" @> ""1""::jsonb
बाहरी जोंस को सवाल में डालने के संकेत के लिए पिटो का धन्यवाद जिसने इसे स्पष्ट किया