mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Add the support of 'SUBSTR' function compatible with Oracle and SAPDB (SCRUM #872)
This commit is contained in:
@ -532,3 +532,24 @@ t1 CREATE TABLE `t1` (
|
|||||||
`replace(_latin2'abcd',_latin2'b',_latin2'B')` char(4) character set latin2 NOT NULL default ''
|
`replace(_latin2'abcd',_latin2'b',_latin2'B')` char(4) character set latin2 NOT NULL default ''
|
||||||
) TYPE=MyISAM CHARSET=latin1
|
) TYPE=MyISAM CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
select SUBSTR('abcdefg',3,2);
|
||||||
|
SUBSTR('abcdefg',3,2)
|
||||||
|
cd
|
||||||
|
select SUBSTRING('abcdefg',3,2);
|
||||||
|
SUBSTRING('abcdefg',3,2)
|
||||||
|
cd
|
||||||
|
select SUBSTR('abcdefg',-3,2) FROM DUAL;
|
||||||
|
SUBSTR('abcdefg',-3,2)
|
||||||
|
ef
|
||||||
|
select SUBSTR('abcdefg',-1,5) FROM DUAL;
|
||||||
|
SUBSTR('abcdefg',-1,5)
|
||||||
|
g
|
||||||
|
select SUBSTR('abcdefg',0,0) FROM DUAL;
|
||||||
|
SUBSTR('abcdefg',0,0)
|
||||||
|
|
||||||
|
select SUBSTR('abcdefg',-1,-1) FROM DUAL;
|
||||||
|
SUBSTR('abcdefg',-1,-1)
|
||||||
|
|
||||||
|
select SUBSTR('abcdefg',1,-1) FROM DUAL;
|
||||||
|
SUBSTR('abcdefg',1,-1)
|
||||||
|
|
||||||
|
@ -294,3 +294,14 @@ select
|
|||||||
;
|
;
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# test for SUBSTR
|
||||||
|
#
|
||||||
|
select SUBSTR('abcdefg',3,2);
|
||||||
|
select SUBSTRING('abcdefg',3,2);
|
||||||
|
select SUBSTR('abcdefg',-3,2) FROM DUAL;
|
||||||
|
select SUBSTR('abcdefg',-1,5) FROM DUAL;
|
||||||
|
select SUBSTR('abcdefg',0,0) FROM DUAL;
|
||||||
|
select SUBSTR('abcdefg',-1,-1) FROM DUAL;
|
||||||
|
select SUBSTR('abcdefg',1,-1) FROM DUAL;
|
||||||
|
@ -979,13 +979,14 @@ void Item_func_right::fix_length_and_dec()
|
|||||||
String *Item_func_substr::val_str(String *str)
|
String *Item_func_substr::val_str(String *str)
|
||||||
{
|
{
|
||||||
String *res = args[0]->val_str(str);
|
String *res = args[0]->val_str(str);
|
||||||
int32 start = (int32) args[1]->val_int()-1;
|
int32 start = (int32) args[1]->val_int();
|
||||||
int32 length = arg_count == 3 ? (int32) args[2]->val_int() : INT_MAX32;
|
int32 length = arg_count == 3 ? (int32) args[2]->val_int() : INT_MAX32;
|
||||||
int32 tmp_length;
|
int32 tmp_length;
|
||||||
|
|
||||||
if ((null_value=(args[0]->null_value || args[1]->null_value ||
|
if ((null_value=(args[0]->null_value || args[1]->null_value ||
|
||||||
(arg_count == 3 && args[2]->null_value))))
|
(arg_count == 3 && args[2]->null_value))))
|
||||||
return 0; /* purecov: inspected */
|
return 0; /* purecov: inspected */
|
||||||
|
start= (int32)((start < 0) ? res->length() + start : start -1);
|
||||||
start=res->charpos(start);
|
start=res->charpos(start);
|
||||||
length=res->charpos(length,start);
|
length=res->charpos(length,start);
|
||||||
if (start < 0 || (uint) start+1 > res->length() || length <= 0)
|
if (start < 0 || (uint) start+1 > res->length() || length <= 0)
|
||||||
|
@ -627,6 +627,7 @@ static SYMBOL sql_functions[] = {
|
|||||||
{ "STD", SYM(STD_SYM),0,0},
|
{ "STD", SYM(STD_SYM),0,0},
|
||||||
{ "STDDEV", SYM(STD_SYM),0,0},
|
{ "STDDEV", SYM(STD_SYM),0,0},
|
||||||
{ "STRCMP", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_strcmp)},
|
{ "STRCMP", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_strcmp)},
|
||||||
|
{ "SUBSTR", SYM(SUBSTRING),0,0},
|
||||||
{ "SUBSTRING", SYM(SUBSTRING),0,0},
|
{ "SUBSTRING", SYM(SUBSTRING),0,0},
|
||||||
{ "SUBSTRING_INDEX", SYM(SUBSTRING_INDEX),0,0},
|
{ "SUBSTRING_INDEX", SYM(SUBSTRING_INDEX),0,0},
|
||||||
{ "SUBTIME", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_subtime)},
|
{ "SUBTIME", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_subtime)},
|
||||||
|
Reference in New Issue
Block a user