MySQL LOCATE - POSITION возвращает неправильный номер - PullRequest
0 голосов
/ 09 апреля 2019

Итак, у меня есть оператор 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 ...

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

1 Ответ

1 голос
/ 09 апреля 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...