Я новичок в PSQL. Я изучаю существующую базу данных, которая хранит filterbitstring
в виде строки 0 и 1, первый символ в строке имеет значение индекса 0, второй, значение индекса 1, до 85-го, имеющего значение индекса (вы уже догадались) 84.
Ради разборчивости я ограничиваю строку здесь 15 символами:
011000001111110
Есть еще одна таблица, которая содержит подписи для каждого значения индекса, к которому я хотел бы присоединиться. Моя задача состоит в том, чтобы превратить цепочку единиц и нулей, которая может быть любой длины, в набор строк filterindex, фильтрующих:
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
.
Есть ли лучший способ поворота струны?
Заранее спасибо за ваш совет!