Je suis en train de mettre en œuvre une fonction MYSQL MY_LEFT_STR (STRING x, la position INT) de telle sorte queMYSQL: fonction auto chaîne de manipulation écrite renvoie un résultat inattendu
- MY_LEFT_STR ('BONJOUR', 4) => rendements HELL '(identique au fonctionnement interne de GAUCHE)
- MY_LEFT_STR ('BONJOUR', - 1) => rendements HELL'
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;
le résultat est
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 |
+-----+-----+-----+
QUESTION Quel est le problème avec ma déclaration de fonction? (Outre le manque generall de tests pour bordercases comme MY_LEFT_STR ('A', - 4) ...
RÉPONSE: si ... embarassing la réponse réside dans le double négatif pos = -1 dans
RETURN LEFT(in_str,LENGTH(in_str) - pos);
cela devrait être
RETURN LEFT(in_str,LENGTH(in_str) + pos);
Pourquoi est-ce mal? – butterchicken
BANG (le son de la main frappe le front! => Je l'ai eu, merci! – lexu