MySQL LOCATE - POSITION возвращает неправильный номер

Итак, у меня есть оператор SELECT, подобный этому:

SELECT 
    POSITION(
            '^email' IN b.form) + CHAR_LENGTH('^email...') as 'email_start',
    LOCATE('~',b.form, POSITION(
            '^email' IN b.form) + CHAR_LENGTH('^email...')) as 'email_end',
    (LOCATE('~',b.form, POSITION(
            '^email' IN b.form) + CHAR_LENGTH('^email...')) -

    POSITION(
            '^email' IN b.form) + CHAR_LENGTH('^email...')) as 'num_chars',
    b.form as 'Form'

    FROM
        f98_bookingdates as bd
    JOIN
        f98_booking as b
        on b.booking_id = bd.booking_id

    LIMIT 20

И он возвращает:

email_start    email_end   num_chars
       444           474          48

email_start правильный. email_end правильный.

Но 474 - 444 не 48...

Любая помощь будет оценена ...

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы добавил дополнительную скобку вокруг второй части расчета:

(LOCATE('~',b.form, POSITION(
            '^email' IN b.form) + CHAR_LENGTH('^email...')) -    
(POSITION(
         '^email' IN b.form) + CHAR_LENGTH('^email...'))) as 'num_chars'

Причина в том, что вы хотите сначала вычислить начальную позицию и вычесть ее из конечной позиции.

Другие вопросы по теме