我想以这样的方式来实现MYSQL功能MY_LEFT_STR(串x,INT位置)是MYSQL:编写自己的字符串处理函数返回意外的结果
- MY_LEFT_STR( 'HELLO',4) =>返回 '地狱'(同内部LEFT功能)
- MY_LEFT_STR( 'HELLO', - 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' bordercases的, - 4) ...
答案:这么尴尬......答案就在双重利空的POS = -1
RETURN LEFT(in_str,LENGTH(in_str) - pos);
这应该是
RETURN LEFT(in_str,LENGTH(in_str) + pos);
为什么这是错? – butterchicken 2009-08-20 07:12:30
BANG(额头上的手的声音!=>我明白了,谢谢! – lexu 2009-08-20 07:14:20