MySQL как не учитывать первый символ при выборке?

Появилась интересная задача - нужно при поиске на сайте не учитывать "0", если это первый символ в значении поля, по которому осуществляется поиск. Причем поиск должен осуществляться по точному совпадению, а не по вхождению через LIKE "%%".

Для начала нам нужно удалить этот первый "0" с поисковой фразы, это просто:

if (strpos($word, '0') === 0) {
  $word = substr($word, 1);
}

Но теперь нам нужно удалить этот первый "0" с поля, по которому осуществляется поиск в MySQL запросе. 

В MySQL есть функция REPLACE но она заменяет все вхождения, а не только 1, который находится сначала.  

В MySQL есть также функция REGEXP, но она только может найти с использованием регулярного выражения, но не заменить.

Идеальной была бы функция REGEXP_REPLACE но ее нету в MySQL

Решение:

IF (
    LEFT(db_field, 1) != '0',
    db_field,
    CONCAT(
        REPLACE(LEFT(db_field, 1), '0', ''),
        SUBSTRING(db_field, 2, CHAR_LENGTH(db_field))
    )
)

Пояснение:

Если "IF" первый символ не "0" "LEFT(db_field, 1) != '0'" то берем это поле и ничего не делаем.

Если же "0" то заменяем этот "0" на пусто "REPLACE(LEFT(db_field, 1), '0', '')", а также берем все символы кроме первого "SUBSTRING(db_field, 2, CHAR_LENGTH(db_field)" и объединяем все "CONCAT"

 

Добавить комментарий

CAPTCHA
Защита от спама
Target Image