Я пытаюсь реализовать функцию MY_LEFT_STR MYSQL (STRING х, INT положения) таким образом, чтоMYSQL: сама функция, написанная строка-манипуляция возвращает неожиданный результат
- MY_LEFT_STR («ПРИВЕТ», 4) => возвращает 'АД' (такой же, как внутренней функции левого)
- MY_LEFT_STR ('Привет', - 1) => возвращает 'АД'
DROP FUNCTION IF EXISTS MY_LEFT_STR;
CREATE FUNCTION MY_LEFT_STR(
in_str VARCHAR(255),
pos INT
)
RETURNS VARCHAR(255)
BEGIN
IF (pos < 0) THEN
RETURN LEFT(in_str,LENGTH(in_str) - pos);
ELSE
RETURN LEFT(in_str,pos);
END IF;
END;
результат
select left_str('HELLO', 4) as A
, left_str('HELLO',-1) as B
, left('HELLO',length('HELLO')-1) as C
from dual
+-----+-----+-----+
| A | B | C |
+-----+-----+-----+
|HELL |HELLO|HELL |
+-----+-----+-----+
ВОПРОС Что случилось с моей функции декларации? (Кроме Generall отсутствие тестирования как пограничных случаев MY_LEFT_STR ('A', - 4) ...
ОТВЕТ: так смущают ... ответ лежит в двойной отрицательный для поз = -1 в
RETURN LEFT(in_str,LENGTH(in_str) - pos);
это должно быть
RETURN LEFT(in_str,LENGTH(in_str) + pos);
Почему это так? – butterchicken
BANG (звук руки ударил лбом! => Я получил его, спасибо! – lexu