sql >> Databasteknik >  >> RDS >> MariaDB

Hur MID() fungerar i MariaDB

I MariaDB, MID() är en synonym för SUBSTRING() . Den returnerar en delsträng från en given sträng.

Enligt MariaDB-dokumentationen är det en synonym för SUBSTRING(str,pos,len) syntax för SUBSTRING() Men mina tester visar att det fungerar med alla de olika formerna.

Syntax

Enligt MariaDB-dokumentationen går syntaxen så här:

MID(str,pos,len)

Jag har dock upptäckt att det fungerar med följande formulär (som är samma formulär som SUBSTRING() stöder):

MID(str,pos), 
MID(str FROM pos), 
MID(str,pos,len),
MID(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.

Exempel

Här är ett grundläggande exempel:

SELECT MID('Drink your beer', 7);

Resultat:

+---------------------------+
| MID('Drink your beer', 7) |
+---------------------------+
| your beer                 |
+---------------------------+

Här är samma exempel, men med FROM syntax:

SELECT MID('Drink your beer' FROM 7);

Resultat:

+-------------------------------+
| MID('Drink your beer' FROM 7) |
+-------------------------------+
| your beer                     |
+-------------------------------+

Längd på delsträng

Här är ett exempel som anger längden på delsträngen som ska extraheras. Detta är den enda syntaxen som MariaDB-dokumentationen citerar för MID() funktion.

SELECT MID('Drink your beer', 7, 4);

Resultat:

+------------------------------+
| MID('Drink your beer', 7, 4) |
+------------------------------+
| your                         |
+------------------------------+

Och här använder den FROM...FOR syntax:

SELECT MID('Drink your beer' FROM 7 FOR 4);

Resultat:

+-------------------------------------+
| MID('Drink your beer' FROM 7 FOR 4) |
+-------------------------------------+
| your                                |
+-------------------------------------+

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 MID('Drink your beer', -9);

Resultat:

+----------------------------+
| MID('Drink your beer', -9) |
+----------------------------+
| your beer                  |
+----------------------------+

En negativ position kan också användas när du använder FROM syntax:

SELECT MID('Drink your beer' FROM -9 FOR 4);

Resultat:

+--------------------------------------+
| MID('Drink your beer' FROM -9 FOR 4) |
+--------------------------------------+
| your                                 |
+--------------------------------------+

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 
    MID('Drink your beer', 0) AS "0",
    MID('Drink your beer', 1) AS "1";

Resultat:

+-----------------+-----------------+
| 0               | 1               |
+-----------------+-----------------+
| Drink your beer | Drink your beer |
+-----------------+-----------------+

Här är den i standardläge:

SET SQL_MODE=DEFAULT;
SELECT 
    MID('Drink your beer', 0) AS "0",
    MID('Drink your beer', 1) AS "1";

Resultat:

+------+-----------------+
| 0    | 1               |
+------+-----------------+
|      | Drink your beer |
+------+-----------------+

Nollargument

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

SELECT 
    MID(null, 3, 3),
    MID('Beer', null, 3),
    MID('Beer', 3, null),
    MID(null, null, null);

Resultat:

+-----------------+----------------------+----------------------+-----------------------+
| MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) |
+-----------------+----------------------+----------------------+-----------------------+
| NULL            | NULL                 | NULL                 | NULL                  |
+-----------------+----------------------+----------------------+-----------------------+

Argument saknas

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

SELECT MID();

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. Beräkna decil från frekvens i MySQL

  2. Programmatiskt hämta SQL Server lagrad procedur källa som är identisk med källan som returneras av SQL Server Management Studio gui?

  3. Använda Alias ​​In When-del av ett ärendeutlåtande i Oracle SQL

  4. En guide till PubNub-funktioner