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

Sorry for my English! English is not my native language. One of the reasons to create this blog is to improve my English writing. So I will be highly obliged if you will help me with this. If you find a grammar error on this page, please select it with your mouse and press Ctrl+Enter.

Появилась интересная задача - нужно при поиске на сайте не учитывать "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"

 

Add new comment

CAPTCHA
Spam protection
Target Image