Один запрос MySQL для получения подстроки из двух полей, объединенных без объединения полных полей.

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

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

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)

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


person Steven    schedule 16.04.2011    source источник


Ответы (1)


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

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

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

person Rudie    schedule 16.04.2011
comment
смещение является переменной len является статической - person Steven; 17.04.2011