Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / числа до двоеточия и после в строке... / 10 сообщений из 10, страница 1 из 1
22.02.2017, 12:38
    #39409067
Klax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
Есть таблица:
id string
1 2,4:2,9
2 4:6
3 3:5
4 1,4:4,8

Необходимо выбрать все строки, где число X входит в диапазон, записанный через двоеточие.
Помогите, пожалуйста, в SQL почти не шарю...

Спасибо.
...
Рейтинг: 0 / 0
22.02.2017, 14:55
    #39409170
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
Спроси того, кто эту кривую таблицу проектировал.
...
Рейтинг: 0 / 0
22.02.2017, 16:12
    #39409222
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
Klax,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t (id, string) as (
   values (1, '2.4:2.9'),
          (2, '4:6'), 
          (3, '3:5'), 
          (4, '1.4:4.8')
)
   select * from t 
   where 3 between split_part(t.string,':',1)::numeric 
                     and split_part(t.string,':',2)::numeric;
...
Рейтинг: 0 / 0
28.02.2017, 11:02
    #39411434
Klax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
Павел Лузанов, спасибо!..
...
Рейтинг: 0 / 0
28.02.2017, 11:21
    #39411451
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
можно развить идею, вдруг даст хороший результат на большом количестве:

сделать индекс на диапазонный тип numrange, к которому преобразовать split_part(t.string,':',1) и split_part(t.string,':',2)::numeric+0.01
где 0.01 это минимальное число в вашей системе счисления, и необходимо прибавить что бы правый крайний входил в диапазон тоже

и поиск в запросе делать на вхождение 3 в диапазон=)

либо делать два индекса на split_part(t.string,':',1) и split_part(t.string,':',2) для текущего решения, но как по ним будет, не знаю)
...
Рейтинг: 0 / 0
28.02.2017, 12:00
    #39411481
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
Legushkaгде 0.01 это минимальное число в вашей системе счисления, и необходимо прибавить что бы правый крайний входил в диапазон тоже
Ммм, а зачем? range типы же умеют штатно включать хвосты диапазона. Конструируется в виде '[2.4,2.9]'::numrange строковым литералом или numrange(2.4, 2.9, '[]') в виде вызова функции.
...
Рейтинг: 0 / 0
28.02.2017, 12:04
    #39411485
Klax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
В текущем проекте делаем товары со свойствами. И там будут такие свойства как цвет, размер, длина, глубина и т.д.
В некоторых свойствах возможны диапазоны. Поэтому и хранить его решили пока в одной строке, разделив "от" и "до" двоеточием.
Ну и в фильтре тоже будет диапазон. Т.е. к примеру выбрать все товары, где длина от 3" до 7"...
...
Рейтинг: 0 / 0
28.02.2017, 12:08
    #39411494
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
KlaxВ текущем проекте делаем товары со свойствами. И там будут такие свойства как цвет, размер, длина, глубина и т.д.
В некоторых свойствах возможны диапазоны. Поэтому и хранить его решили пока в одной строке, разделив "от" и "до" двоеточием.
Ну и в фильтре тоже будет диапазон. Т.е. к примеру выбрать все товары, где длина от 3" до 7"...

а почему range типы не устраивают ?
почему всё внавал, но при этом не hstore с гибким содержимым ?
ну и т.п. (hstore(...,range,...) ?
...
Рейтинг: 0 / 0
28.02.2017, 12:14
    #39411499
Klax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
Соответственно будет поиск по наложению отрезков. Это я уже нашел и реализовал...
...
Рейтинг: 0 / 0
28.02.2017, 12:42
    #39411518
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числа до двоеточия и после в строке...
Melkij...или numrange(2.4, 2.9, '[]') в виде вызова функции.
Melkij, спасибо.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / числа до двоеточия и после в строке... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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