powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / in по множеству в текстовом поле
12 сообщений из 12, страница 1 из 1
in по множеству в текстовом поле
    #38966000
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрый день.
в таблице в одном поле DOM хранятся дома через запятую без пробелов
"1,10/8,3,4,5,6,7"
"13а,15,16/15,17,19,19а,19в,20/12,20а,20б"
"22,23,25,26/5,27,28,29,31,32,33,33а,33б"
"33в,34,35,36,37,38,39,40,41,42,43,43а,45"
"46,47,49,51,53,55,57,58,59,61,67,69"


если искать вхождение дома 23 по строке то выйдет третяя строка
но допустим мне надо найти все записи с номером дома 7?
пробую достать через лайк - выходят и 7ка и строки где 47 и 37....


может есть штатный способ сообщить что текстовое значение это на самом деле множество значений перечисленных через запятую?
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966027
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при таком (неоправданном) формате поля можно конечно прилепить запятую слева и справа в поле и искать типа

like '%,7,%'

или преобразовывать в массив.
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966034
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966061
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh , спасибо, буду пробовать два способа, кто быстрее будет работать
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966270
vaneque
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

плохой вариант, т.к. 7-й дом может быть перечислен в начале или в конце
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966291
vaneque
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имею в виду like '%,7,%'

тогда уже

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with t(house_numbers)
as
(
	select '1,2,3,4,5,6,7,8,9'
	union
	select '4,5,6,7,8,9,10,11'
	union
	select '8,9,10,11,12,13,14,15'
	union
	select '7,12,456,789,2'
	union
	select '23,45,67'
	union
	select '23,45,67,7'
	union
	select '77'
	union
	select '777'

)
select * from t where house_numbers like '%,7,%' or house_numbers like '7,%' or house_numbers like '%,7';



это будет работать, но думаю должен быть вариант грамотнее

vanequeWinnipuh,

плохой вариант, т.к. 7-й дом может быть перечислен в начале или в конце
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966304
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vanequeно думаю должен быть вариант грамотнеедописать запятые в начале и конце, а like заменить на strpos
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966318
vaneque
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

можно так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with data(house_numbers) as
(
	select '1,2,3,4,5,6,7,8,9'
	union
	select '4,5,6,7,8,9,10,11'
	union
	select '8,9,10,11,12,13,14,15'
	union
	select '7,12,456,789,2'
	union
	select '23,45,67'
	union
	select '23,45,67,7'
	union
	select '77'
	union
	select '777'

)
select house_numbers from data where '7' = ANY (String_To_Array(house_numbers, ',')::int[]);



в плане скорости выполнения скрипта надо уже смотреть, но наверно с like будет шустрее работать
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966468
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vanequeWinnipuh,

плохой вариант, т.к. 7-й дом может быть перечислен в начале или в конце

я имел в виду значение поля

при таком (неоправданном) формате поля можно конечно прилепить запятую слева и справа в пол е и искать

чтобы всегда поле было

,22,33,,77,88,
,5,6,33,3,
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966477
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так может )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with t(house_numbers)
as
(
	select '1,2,3,4,5,6,7,8,9'
	union
	select '4,5,6,7,8,9,10,11'
	union
	select '8,9,10,11,12,13,14,15'
	union
	select '7,12,456,789,2'
	union
	select '23,45,67'
	union
	select '23,45,67,7'
	union
	select '77'
	union
	select '777'

)
select * from t where '7' = any(('{' || house_numbers || '}')::text[]);
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966635
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавил еще одну колонку ОКАТО что бы появился смысл:

и использовал вашу идею и немного от себя добавил:
найти все варианты ОКАТО с номером дома 7:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with t(house_numbers, okato)
as
(
	select '4,5,6,7,8,9,10,7,11', 1000
	union
	select '1,2,3,4,5,6,7,8,9', 1001
	union
	select '4,5,6,7,8,9,10,11', 1002
	union
	select '8,9,10,11,12,13,14,15', 1003
	union
	select '7,12,456,789,2', 1004
	union
	select '23,45,67', 1005
	union
	select '23,45,67,7', 1006
	union
	select '77', 1007
	union
	select '777', 1008

)
select okato from (select distinct UNNEST(String_To_Array(house_numbers,',')) as house_numbers, okato from t) t2 where t2.house_numbers='7' ;
...
Рейтинг: 0 / 0
in по множеству в текстовом поле
    #38966640
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в предыдущем примере убрать дистинкт то номер ОКАТО "1000" выйдет 2 раза, так как в нулевой записи дом номер 7 я специально заполнил 2 раза.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / in по множеству в текстовом поле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]