MariaDB има INSTR()
функция, както и LOCATE()
функция. И двете функции изглежда правят абсолютно едно и също нещо – връщат позицията на подниз в низ.
Има обаче разлика.
Разликите
Можем да видим разликата между тези две функции, като разгледаме техния синтаксис, както и няколко примера.
Синтаксис
Синтаксисът за INSTR()
:
INSTR(str,substr)
Двата приети синтаксиса за LOCATE()
:
LOCATE(substr,str)
LOCATE(substr,str,pos)
Където str
е низът, substr
е поднизът за намиране и pos
е позицията за започване на търсенето.
Разликата между двете функции може да бъде обобщена по следния начин:
LOCATE()
функцията приема същите два аргумента, коитоINSTR()
приема, но в обратен ред.
LOCATE()
функцията приема незадължителен трети аргумент, за да посочи началната позиция за търсене.INSTR()
функцията не приема такъв аргумент.
Така че LOCATE()
предоставя допълнителна функционалност, която INSTR()
не предоставя.
Пример 1 – Първата разлика
Ето пример, който показва обратния ред, в който двете функции приемат своите аргументи:
SELECT
INSTR('Disconnect', 'con'),
LOCATE('con', 'Disconnect');
Резултат:
+----------------------------+-----------------------------+ | INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') | +----------------------------+-----------------------------+ | 4 | 4 | +----------------------------+-----------------------------+
Пример 2 – Втората разлика
Ето пример, който показва допълнителната функционалност, която LOCATE()
предоставя през INSTR()
:
SELECT
INSTR('My cat is a good cat', 'cat') AS "INSTR()",
LOCATE('cat', 'My cat is a good cat') AS "LOCATE()",
LOCATE('cat', 'My cat is a good cat', 10) AS "LOCATE() with 3rd Argument";
Резултат:
+---------+----------+----------------------------+ | INSTR() | LOCATE() | LOCATE() with 3rd Argument | +---------+----------+----------------------------+ | 4 | 4 | 18 | +---------+----------+----------------------------+
Този пример подчертава факта, че LOCATE()
функцията ни предоставя незадължителен трети аргумент. Този аргумент ни позволява да посочим начална позиция за търсенето, което означава, че не сме ограничени само до първото появяване в целия низ.