#
# MDEV-14012 - sql_mode=Oracle: substr(): treat position 0 as position 1
# MDEV-10574 - sql_mode=Oracle: return null instead of empty string
#
SET sql_mode=ORACLE;
SELECT SUBSTR('abc' ,2 ,1 ),SUBSTR('abc' ,1 ,1 ), SUBSTR('abc' ,0 ,1 ) FROM dual;
SUBSTR('abc' ,2 ,1 ) SUBSTR('abc' ,1 ,1 ) SUBSTR('abc' ,0 ,1 )
b a a
SELECT SUBSTR('abc' ,2 ),SUBSTR('abc' ,1 ), SUBSTR('abc' ,0 ) FROM dual;
SUBSTR('abc' ,2 ) SUBSTR('abc' ,1 ) SUBSTR('abc' ,0 )
bc abc abc
SELECT SUBSTR(null,2 ,1 ),SUBSTR(null,1 ), SUBSTR(null,0 ) FROM dual;
SUBSTR(null,2 ,1 ) SUBSTR(null,1 ) SUBSTR(null,0 )
NULL NULL NULL
SELECT SUBSTR('abc' ,-2 ),SUBSTR('abc' ,-1 ), SUBSTR('abc' ,-0 ) FROM dual;
SUBSTR('abc' ,-2 ) SUBSTR('abc' ,-1 ) SUBSTR('abc' ,-0 )
bc c abc
SELECT SUBSTR('abc' ,-2 ,1 ),SUBSTR('abc' ,-1 ,1 ), SUBSTR('abc' ,-0 ,1 ) FROM dual;
SUBSTR('abc' ,-2 ,1 ) SUBSTR('abc' ,-1 ,1 ) SUBSTR('abc' ,-0 ,1 )
b c a
SELECT SUBSTR('abc' ,null) FROM dual;
SUBSTR('abc' ,null)
NULL
SELECT SUBSTR('abc' ,2 ,null),SUBSTR('abc' ,1 ,null), SUBSTR('abc' ,0 ,null) FROM dual;
SUBSTR('abc' ,2 ,null) SUBSTR('abc' ,1 ,null) SUBSTR('abc' ,0 ,null)
NULL NULL NULL
SELECT SUBSTR('abc' ,2 ,0 ),SUBSTR('abc' ,1 ,0 ), SUBSTR('abc' ,0 ,0 ) FROM dual;
SUBSTR('abc' ,2 ,0 ) SUBSTR('abc' ,1 ,0 ) SUBSTR('abc' ,0 ,0 )
NULL NULL NULL
SELECT SUBSTR('abc' ,2 ,-1 ),SUBSTR('abc' ,1 ,-1 ), SUBSTR('abc' ,0 ,-1 ) FROM dual;
SUBSTR('abc' ,2 ,-1 ) SUBSTR('abc' ,1 ,-1 ) SUBSTR('abc' ,0 ,-1 )
NULL NULL NULL
SELECT SUBSTR(SPACE(0 ),1 ) FROM DUAL;
SUBSTR(SPACE(0 ),1 )
NULL
CREATE TABLE t1 (c1 VARCHAR(10 ),start INTEGER, length INTEGER);
INSERT INTO t1 VALUES ('abc' , 1 , 1 );
INSERT INTO t1 VALUES ('abc' , 0 , 1 );
INSERT INTO t1 VALUES (null, 1 , 1 );
INSERT INTO t1 VALUES (null, 0 , 1 );
INSERT INTO t1 VALUES ('abc' , 1 , 0 );
INSERT INTO t1 VALUES ('abc' , 0 , 0 );
INSERT INTO t1 VALUES (null, 1 , 0 );
INSERT INTO t1 VALUES (null, 0 , 0 );
INSERT INTO t1 VALUES ('abc' , 1 , -1 );
INSERT INTO t1 VALUES ('abc' , 0 , -1 );
INSERT INTO t1 VALUES (null, 1 , -1 );
INSERT INTO t1 VALUES (null, 0 , -1 );
INSERT INTO t1 VALUES (SPACE(0 ), 0 , 1 );
SELECT SUBSTR(c1,start,length) FROM t1;
SUBSTR(c1,start,length)
a
a
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(10 ) NOT NULL);
CREATE TABLE t2 AS SELECT SUBSTR(C1,1 ,1 ) AS C1 from t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE "t2" (
"C1" varchar(1 ) DEFAULT NULL
)
DROP TABLE t2;
DROP TABLE t1;
EXPLAIN EXTENDED SELECT SUBSTR('abc' ,2 ,1 ) ;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
Warnings:
Note 1003 select substr('abc' ,2 ,1 ) AS "SUBSTR('abc',2,1)"
CREATE VIEW v1 AS SELECT SUBSTR('abc' ,2 ,1 ) ;
SHOW CREATE VIEW v1;
View Create View character_set_client collation_connection
v1 CREATE VIEW "v1" AS select substr('abc' ,2 ,1 ) AS "SUBSTR('abc',2,1)" latin1 latin1_swedish_ci
SELECT * FROM v1;
SUBSTR('abc' ,2 ,1 )
b
DROP VIEW v1;
Messung V0.5 in Prozent C=58 H=100 G=81
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland