मैं पीएसक्यूएल के लिए नया हूँ। मैं एक मौजूदा डेटाबेस की खोज कर रहा हूं, जो filterbitstring को 0 और 1 की स्ट्रिंग के रूप में संग्रहीत करता है, स्ट्रिंग में पहले वर्ण का इंडेक्स वैल्यू 0 है, दूसरा, इंडेक्स वैल्यू 1 है, 85 वें इंडेक्स के माध्यम से का मूल्य (आपने अनुमान लगाया) 84।

सुगमता के लिए, मैं यहाँ स्ट्रिंग को 15 वर्णों तक सीमित कर रहा हूँ:

011000001111110

एक और टेबल है, जिसमें प्रत्येक इंडेक्स वैल्यू के लिए कैप्शन है, जिसमें मैं शामिल होना चाहता हूं। मेरी चुनौती लोगों और शून्य की एक स्ट्रिंग को बदलने में है, जो कि किसी भी लंबाई की हो सकती है, फ़िल्टरइंडेक्स की एक पंक्ति में, फ़िल्टरएक्टिव:

0   0
1   1
2   1
3   0
4   0
5   0
6   0
7   0
8   1
9   1
10  1
11  1
12  1
13  1
14  0

मेरे पास एक कामकाजी प्रश्न है, जो लालित्य पर दृढ़ता का प्रमाण है, और इसलिए मैं इस राक्षसी की तुलना में एक क्लीनर, अधिक सुरुचिपूर्ण समाधान की तलाश में हूं:

SELECT 0 as "filterindex", cast(substring(df.dsr_filtersbitstring,1,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 1 as "filterindex", cast(substring(df.dsr_filtersbitstring,2,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 2 as "filterindex", cast(substring(df.dsr_filtersbitstring,3,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 3 as "filterindex", cast(substring(df.dsr_filtersbitstring,4,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 4 as "filterindex", cast(substring(df.dsr_filtersbitstring,5,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 5 as "filterindex", cast(substring(df.dsr_filtersbitstring,6,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 6 as "filterindex", cast(substring(df.dsr_filtersbitstring,7,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 7 as "filterindex", cast(substring(df.dsr_filtersbitstring,8,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 8 as "filterindex", cast(substring(df.dsr_filtersbitstring,9,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 9 as "filterindex", cast(substring(df.dsr_filtersbitstring,10,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 10 as "filterindex", cast(substring(df.dsr_filtersbitstring,11,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 11 as "filterindex", cast(substring(df.dsr_filtersbitstring,12,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 12 as "filterindex", cast(substring(df.dsr_filtersbitstring,13,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 13 as "filterindex", cast(substring(df.dsr_filtersbitstring,14,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df UNION
SELECT 14 as "filterindex", cast(substring(df.dsr_filtersbitstring,15,1) as boolean) as "filteractive" FROM public.assaabloy_core_defaultfilters as df

filterbitstring, जो वर्तमान में 85 वर्ण लंबा है, भविष्य के संस्करण में लंबा हो सकता है, और इसलिए, जो भी लंबाई filterbitstring का सामना करना पड़ता है, मैं उसके साथ काम करने में सक्षम होना चाहता हूं।

क्या स्ट्रिंग को घुमाने का कोई बेहतर तरीका है?

सलाह के लिए आपको अग्रिम शुक्रिया!

0
kpkpkp 28 फरवरी 2020, 01:47
1
कृपया नमूना इनपुट और आउटपुट डेटा दिखाएं
 – 
Bohemian
28 फरवरी 2020, 02:17
1
with t(x) as (values('011000001111110'::text), ('100010101000101')) select b, n from t, unnest(string_to_array(x, null)) with ordinality as foo(b, n);
 – 
Abelisto
28 फरवरी 2020, 03:37

2 जवाब

generate_series()

select ...
from ...
join generate_series(1, 85)
1
Bohemian 28 फरवरी 2020, 01:56
-- A big thank you to Bohemian for the suggestion!
WITH sq AS
  (SELECT generate_series(0, LENGTH(dsr_filtersbitstring)-1),
          dsr_filtersbitstring
   FROM public.assaabloy_core_defaultfilters)
SELECT DISTINCT sq.generate_series AS "filterindex",
                cast(substring(sq.dsr_filtersbitstring, sq.generate_series+1, 1) AS boolean) AS "filteractive"
FROM sq
ORDER BY filterindex
1
kpkpkp 28 फरवरी 2020, 03:15