Можно ли разбить столбец на 2 столбца

Добрый день, уважаемые Хабравчане,

Подскажите пожалуйста, можно ли в mysql разбить один столбец на два:

у меня есть база кладр и в столбце код находится код объекта из 13 символов (напр:0100000000000)

Задача заключается в том, чтобы разбить это значение на несколько по столбцам например 01 | 000 | 000 | 000 | 00

Хочу разбить значение таким образом для более быстрого поиска объектов (городов, областей и пр.)

Подскажите, можно ли это осуществить при помощи внутренних средств mysql или как можно оптимизировать запрос, чтобы ускорить выборку данных без разбиения столбца?
  • Вопрос задан
  • 7923 просмотра
Пригласить эксперта
Ответы на вопрос 7
Sekira
@Sekira
Можно разделить, функцией SUBSTR
Также не разделяя возможно помогут битовые операции BIT_COUNT и т.п. посмотрите
Или также не разделяя, простым условием, например второй столбец справа, можно найти значения 123 допустим… WHERE `field`>=12300 and `field`<12400
Ответ написан
Комментировать
LeoCcoder
@LeoCcoder
у вас символы… и их 13…
1. разбить их можно без проблем, встроенными средствами работы со строками или внешним скриптом
2. оптимизировать?
а) добавлять сложное условие по этому полю в последнюю очередь
б) можно добавить идекс по этому полю, тогда запросы вида where field = '01%' будут выполяняться быстро. можно например делать where field = '01%' AND substr(field, 3,3) = '000', в первой части условия у вас сработает индекс, что сократит выборку, на которой будет выполняться медленная вторая часть условия.
3. перейти от символов к числам, если возможно. Это даст НЕБОЛЬШОЙ прирост.

ПС: многое зависит от природы запросов к базе и количества данных, универсальнее конечно разбить и поля сделать не символьными, а числовыми
ППС: возможно вам нужно сделать кеширование и до базы будут доходить совсем мало запросов и тогда скорость их выполненеия может стать не критичной
Ответ написан
winbackgo
@winbackgo
Можно создать нужные поля f1, f2, f3 и UPDATE tbl SET f1=SUBSTR(origin, 1, 2), f2=SUBSTR(origin, 3, 3)… Для обновления можно создать триггер.
Ответ написан
Комментировать
Urvin
@Urvin
Используйте строковые функции:
www.mysql.ru/docs/man/String_functions.html

UPDATE table SET new_col_1 = LEFT(oldcol,2), new_col_1 = RIGHT(oldcol,11)
Ответ написан
Комментировать
strib
@strib
Длина строки фиксирована?
Ширина «значений» фиксирована?
DDL и оригиналльный запрос можете показать?
Ответ написан
@Waldhausen
Про LIKE не написали. Можно конструировать строку из 13 символов — значащих и "_" и с ней сравнивать.
Ответ написан
Комментировать
mark_ablov
@mark_ablov
INSERT INTO… + SUBSTR()?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы