Один запрос MySQL для взятия подстроки двух полей, объединенной без конкатата по полям - PullRequest
0 голосов
/ 17 апреля 2011

таблица: поле1, поле2

с учетом смещения, и я хочу, чтобы результат был:

select substr(concat(field1,field2),offset,len) from table

, так как field1 и field2 - большие varchars, и этот запрос является узким местом, я не хочу непрерывно объединять два больших поля вместе и предпочел бы сделать что-то вроде

select case when (offset+len) < length(field1) then substr(field1,offset,len) else....

существует три различных ситуации: 1) субстрат поля1, 2) субстрат поля2 3) субстрат (поле1), согласованный с субстратом (поле2)

У кого-нибудь есть решение этой проблемы? спасибо!

1 Ответ

0 голосов
/ 17 апреля 2011

В MySQL есть функция IF, которая сделает запрос более понятным, чем со структурой CASE.

В любом случае, вы пишете это дорого.Почему бы не создать еще один столбец (с избыточностью!) И сохранить правильные значения там?Избыточность не является проблемой в наши дни, и она намного, намного быстрее, чем любой тип concat, case или if.

(Если offset не является статичным, это не решение. Если offset, но len это не так, - это все еще решение.)

...