Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / in по множеству в текстовом поле / 12 сообщений из 12, страница 1 из 1
22.05.2015, 09:59
    #38966000
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
добрый день.
в таблице в одном поле 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
22.05.2015, 10:29
    #38966027
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
при таком (неоправданном) формате поля можно конечно прилепить запятую слева и справа в поле и искать типа

like '%,7,%'

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

плохой вариант, т.к. 7-й дом может быть перечислен в начале или в конце
...
Рейтинг: 0 / 0
22.05.2015, 13:28
    #38966291
vaneque
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
имею в виду 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
22.05.2015, 13:38
    #38966304
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
vanequeно думаю должен быть вариант грамотнеедописать запятые в начале и конце, а like заменить на strpos
...
Рейтинг: 0 / 0
22.05.2015, 13:42
    #38966318
vaneque
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
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
22.05.2015, 15:18
    #38966468
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
vanequeWinnipuh,

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

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

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

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

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

Код: 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
22.05.2015, 17:12
    #38966635
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
добавил еще одну колонку ОКАТО что бы появился смысл:

и использовал вашу идею и немного от себя добавил:
найти все варианты ОКАТО с номером дома 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
22.05.2015, 17:15
    #38966640
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in по множеству в текстовом поле
если в предыдущем примере убрать дистинкт то номер ОКАТО "1000" выйдет 2 раза, так как в нулевой записи дом номер 7 я специально заполнил 2 раза.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / in по множеству в текстовом поле / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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