MariaDB har en LTRIM()
funktion och en LTRIM_ORACLE()
fungera. Båda funktionerna gör i princip samma sak. Men det finns en mindre skillnad.
Skillnaden
Skillnaden ligger i hur varje funktion hanterar tomma strängar:
LTRIM()
tar bort inledande mellanslag från en sträng. När du passerar en tom sträng kommer resultatet att bero på om du är i Oracle-läge eller inte. Om den är i Oracle-läge returnerar dennull
. Annars returnerar den en tom sträng.LTRIM_ORACLE()
är en synonym för Oracle-lägesversionen avLTRIM()
. Den beter sig somLTRIM()
i Oracle-läge (det returnerarnull
när en tom sträng skickas), även när den inte är i Oracle-läge.
Alltså LTRIM_ORACLE()
fungerar precis som LTRIM()
i Oracle-läge. Men när den inte är i Oracle-läge är den enda skillnaden hur varje funktion hanterar tomma strängar.
Exempel
Detta förklaras bäst med ett exempel.
Standardläge
Här är en jämförelse av dessa funktioner i standardläge:
SET SQL_MODE=DEFAULT;
SELECT
LTRIM(''),
LTRIM_ORACLE('');
Resultat:
+-----------+------------------+ | LTRIM('') | LTRIM_ORACLE('') | +-----------+------------------+ | | NULL | +-----------+------------------+
Först satte jag mitt system till standardläge (även om det förmodligen redan var i standardläge), sedan körde jag båda funktionerna med en tom sträng.
Vi kan se att LTRIM()
returnerar en tom sträng medan LTRIM_ORACLE()
returnerar null
.
Oracle Mode
Låt oss nu ställa in den till Oracle-läge och köra koden igen:
SET SQL_MODE=ORACLE;
SELECT
LTRIM(''),
LTRIM_ORACLE('');
Resultat:
+-----------+------------------+ | LTRIM('') | LTRIM_ORACLE('') | +-----------+------------------+ | NULL | NULL | +-----------+------------------+
Vi kan se att LTRIM()
beter sig nu som LTRIM_ORACLE()
.
Så med LTRIM()
, måste vi explicit byta till Oracle-läge innan vi får det att bete sig som Oracle-versionen av LTRIM()
.
LTRIM_ORACLE()
å andra sidan, är tillgänglig i alla lägen, så det slipper oss från att behöva byta till Oracle-läge.