MariaDB har en RTRIM() funktion och en RTRIM_ORACLE() fungera. Båda funktionerna gör i princip samma sak. Men det finns en mindre skillnad.
Skillnaden
Skillnaden är hur varje funktion hanterar tomma strängar:
RTRIM()tar bort efterföljande 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.RTRIM_ORACLE()är en synonym för Oracle-lägesversionen avRTRIM(). Den beter sig somRTRIM()i Oracle-läge (det returnerarnullnär en tom sträng skickas), även när den inte är i Oracle-läge.
Alltså RTRIM_ORACLE() fungerar precis som RTRIM() 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
RTRIM(''),
RTRIM_ORACLE(''); Resultat:
+-----------+------------------+
| RTRIM('') | RTRIM_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 RTRIM() returnerar en tom sträng medan RTRIM_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
RTRIM(''),
RTRIM_ORACLE(''); Resultat:
+-----------+------------------+
| RTRIM('') | RTRIM_ORACLE('') |
+-----------+------------------+
| NULL | NULL |
+-----------+------------------+
Vi kan se att RTRIM() beter sig nu som RTRIM_ORACLE() .
Så med RTRIM() , måste vi explicit byta till Oracle-läge innan vi får det att bete sig som Oracle-versionen av RTRIM() .
RTRIM_ORACLE() å andra sidan, är tillgänglig i alla lägen, så det slipper oss från att behöva byta till Oracle-läge.