मैं एक समाधान के साथ आया होगा:
SELECT id
,l - length(replace(t, 'P', '')) AS nr_p
,l - length(replace(t, 'F', '')) AS nr_f
,l - length(replace(t, 'I', '')) AS nr_i
FROM (SELECT id, test::text AS t, length(test::text) AS l FROM test) t
ट्रिक इस तरह काम करती है:
- पंक्ति प्रकार को उसके टेक्स्ट प्रस्तुतिकरण में रूपांतरित करें।
- वर्ण-लंबाई मापें।
- उस वर्ण को बदलें जिसे आप गिनना चाहते हैं और लंबाई में परिवर्तन को मापें।
- बार-बार उपयोग के लिए उप-चयन में मूल पंक्ति की लंबाई की गणना करें।
इसके लिए आवश्यक है कि P, F, I
पंक्ति में कहीं और मौजूद नहीं हैं। हस्तक्षेप करने वाले किसी भी अन्य कॉलम को बाहर करने के लिए उप-चयन का उपयोग करें।
8.4 - 9.1 में परीक्षण किया गया। आजकल कोई भी PostgreSQL 7.4 का उपयोग नहीं करता है, आपको स्वयं का परीक्षण करना होगा। मैं केवल बुनियादी कार्यों का उपयोग करता हूं, लेकिन मुझे यकीन नहीं है कि पंक्ति प्रकार को पाठ में डालना 7.4 में संभव है। यदि वह काम नहीं करता है, तो आपको सभी परीक्षण-स्तंभों को एक बार हाथ से जोड़ना होगा:
SELECT id
,length(t) - length(replace(t, 'P', '')) AS nr_p
,length(t) - length(replace(t, 'F', '')) AS nr_f
,length(t) - length(replace(t, 'I', '')) AS nr_i
FROM (SELECT id, test1||test2||test3||test4 AS t FROM test) t
इसके लिए जरूरी है कि सभी कॉलम NOT NULL
हों ।