sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB SUBSTR() Förklarad

I MariaDB, SUBSTR() är en synonym för SUBSTRING() .

Det är en inbyggd strängfunktion som returnerar en delsträng från en given sträng.

Det kräver minst två argument; strängen och den position som understrängen ska extraheras från. Den accepterar också ett valfritt tredje argument som låter dig specificera hur lång delsträngen ska vara.

Syntax

Syntaxen har följande former:

SUBSTR(str,pos), 
SUBSTR(str FROM pos), 
SUBSTR(str,pos,len),
SUBSTR(str FROM pos FOR len)

Där str är strängen, pos är startpositionen för delsträngen och len är antalet tecken som ska extraheras.

De två formulären som använder FROM nyckelord är standard SQL-syntax.

Exempel

Här är ett grundläggande exempel:

SELECT SUBSTR('Good doggy', 6);

Resultat:

+-------------------------+
| SUBSTR('Good doggy', 6) |
+-------------------------+
| doggy                   |
+-------------------------+

Här är samma exempel, men med standard SQL-syntax:

SELECT SUBSTR('Good doggy' FROM 6);

Resultat:

+-----------------------------+
| SUBSTR('Good doggy' FROM 6) |
+-----------------------------+
| doggy                       |
+-----------------------------+

Längd på delsträng

Här är ett exempel som anger längden på delsträngen som ska extraheras:

SELECT SUBSTR('Good doggy', 6, 3);

Resultat:

+----------------------------+
| SUBSTR('Good doggy', 6, 3) |
+----------------------------+
| dog                        |
+----------------------------+

Och här använder den standard SQL-syntax:

SELECT SUBSTR('Good doggy' FROM 6 FOR 3);

Resultat:

+-----------------------------------+
| SUBSTR('Good doggy' FROM 6 FOR 3) |
+-----------------------------------+
| dog                               |
+-----------------------------------+

Negativ position

Att ange ett negativt värde för positionen gör att startpositionen räknas bakåt från slutet av strängen:

SELECT SUBSTR('Good doggy', -5);

Resultat:

+--------------------------+
| SUBSTR('Good doggy', -5) |
+--------------------------+
| doggy                    |
+--------------------------+

En negativ position kan också användas när du använder standard SQL-syntax:

SELECT SUBSTR('Good doggy' FROM -5 FOR 3);

Resultat:

+------------------------------------+
| SUBSTR('Good doggy' FROM -5 FOR 3) |
+------------------------------------+
| dog                                |
+------------------------------------+

I det här fallet ställer jag också in en längd för delsträngen.

Oracle Mode

I Oracle-läge, startpositionen 0 (noll) behandlas som 1 . Däremot en startposition på 1 behandlas också som 1 .

Detta är i motsats till andra lägen, där 0 returnerar en tom sträng.

Exempel:

SET SQL_MODE=ORACLE;
SELECT 
    SUBSTR('Good doggy', 0) AS "0",
    SUBSTR('Good doggy', 1) AS "1";

Resultat:

+------------+------------+
| 0          | 1          |
+------------+------------+
| Good doggy | Good doggy |
+------------+------------+

Här är den i standardläge:

SET SQL_MODE=DEFAULT;
SELECT 
    SUBSTR('Good doggy', 0) AS "0",
    SUBSTR('Good doggy', 1) AS "1";

Resultat:

+------+------------+
| 0    | 1          |
+------+------------+
|      | Good doggy |
+------+------------+

Nollargument

Om något (eller alla) av argumenten är null , SUBSTR() funktion returnerar null :

SELECT 
    SUBSTR(null, 3, 3),
    SUBSTR('Doggy', null, 3),
    SUBSTR('Doggy', 3, null),
    SUBSTR(null, null, null);

Resultat:

+--------------------+--------------------------+--------------------------+--------------------------+
| SUBSTR(null, 3, 3) | SUBSTR('Doggy', null, 3) | SUBSTR('Doggy', 3, null) | SUBSTR(null, null, null) |
+--------------------+--------------------------+--------------------------+--------------------------+
| NULL               | NULL                     | NULL                     | NULL                     |
+--------------------+--------------------------+--------------------------+--------------------------+

Argument saknas

Anropar SUBSTR() utan att skicka några argument resulterar i ett fel:

SELECT SUBSTR();

Resultat:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

  1. Huawei GaussDB

  2. Hur man kör en procedur inuti ett paket i Oracle

  3. Hur returnerar man en resultatuppsättning/markör från ett anonymt Oracle PL/SQL-block som kör Dynamic SQL?

  4. radera kolumnen finns inte