MySQL 字串截取相關函數

來源:互聯網
上載者:User

MySQL 字串截取相關函數

在工作中,可能需要將某些欄位按某個分割符組成一個字串作為欄位值存取到資料庫表中,比如某個任務對應三個結果,分別儲存在不同的資料表中,這時可以將這三個不同表的主鍵按照約定的順序進行組合(主鍵a:主鍵b:主鍵c)。當需要分別去查任務對應類別的詳情資訊時,可以截取特定位置的字串(主鍵b) join 表b進行操作。正好最近也遇到這塊操作,特意將 MySQL 字串截取的相關函數做一個梳理,以便今後回顧。

一、left(str, len)

返回字串 str 自左數的 len 個字元。如果任一參數為 NULL,則返回 NULL。

mysql> select left('shinejaie', 5);+---------------------------------------------------------+| left('shinejaie', 5)                                    |+---------------------------------------------------------+| shine                                                   |+---------------------------------------------------------+1 row in set (0.00 sec)
二、right(str, len)
返回 str 右邊末 len 位的字元。如果有的參數是 NULL 值,則返回 NULL。
mysql> select right('shinejaie', 4);+---------------------------------------------------------+| right('shinejaie', 4)                                   |+---------------------------------------------------------+| jaie                                                    |+---------------------------------------------------------+1 row in set (0.00 sec)
三、substring_index(str, delim, count)
返回 str 中第 count 次出現的分隔字元 delim 之前的子字串。如果 count 為正數,將最後一個分隔字元左邊(因為是從左數分隔字元)的所有內容作為子字串返回;如果 count 為負值,返回最後一個分隔字元右邊(因為是從右數分隔字元)的所有內容作為子字串返回。在尋找分隔字元時,函數對大小寫是敏感的。如果在字串 str 中找不到 delim 參數指定的值,就返回整個字串。
mysql> select substring_index('home.cnblogs.com', '.', 2);+---------------------------------------------------------+| substring_index('home.cnblogs.com', '.', 2)             |+---------------------------------------------------------+| home.cnblogs                                            |+---------------------------------------------------------+1 row in set (0.00 sec)
mysql> select substring_index('home.cnblogs.com', '/', 2);+---------------------------------------------------------+| substring_index('home.cnblogs.com', '/', 2)             |+---------------------------------------------------------+| home.cnblogs.com                                        |+---------------------------------------------------------+1 row in set (0.00 sec)
四、substring() 與 substr() ---> substring(str, pos)、substring(str from pos)、substring(str, pos, len)、substring(str from pos for len)
在以上4種函數變種形式中,沒有 len 參數的函數形式會返回自 str 中位置 pos 處之後的子字串;有 len 參數的函數形式會返回自 str 中位置 pos 處之後,長度為 len 的子字串。使用 FROM 的函數形式則是採用的標準的 SQL 文法。pos 參數也可能取負值,在這種情況下,取字串的方式是從字串 str 的末尾向前(而非從前往後),從這種逆向順序的 pos 處開始取字串。另外,負值的 pos 參數可用於任何形式的 substring() 函數中。
mysql> select substring('shinejaie', 6);+---------------------------------------------------------+| substring('shinejaie',6)                                |+---------------------------------------------------------+| jaie                                                    |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> select substr('shinejaie' from 6);+---------------------------------------------------------+| substr('shinejaie' from 6)                              |+---------------------------------------------------------+| jaie                                                    |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> select substring('shinejaie', -9, 5);+---------------------------------------------------------+| substring('shinejaie', -9, 5)                           |+---------------------------------------------------------+| shine                                                   |+---------------------------------------------------------+1 row in set (0.00 sec)
五、trim([{both | leading | trailing} [remstr] form] str)
將字串 str去除 remstr 所指定的首碼或尾碼,返回結果字串。如果沒有指定標識符bothleading,或trailing,則預設採用 both,即將前尾碼都刪除。remstr 其實是個選擇性參數,如果沒有指定它,則刪除的是空格。
mysql> select trim('  shinejaie   ');+---------------------------------------------------------+| trim('  shinejaie   ')                                  |+---------------------------------------------------------+| shinejaie                                               |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> select trim(leading 'cn_' from 'cn_shinejaiecn_');+---------------------------------------------------------+| trim(leading 'cn_' from 'cn_shinejaiecn_')              |+---------------------------------------------------------+| shinejaiecn_                                            |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> select trim(both 'cn_' from 'cn_shinejaiecn_');+---------------------------------------------------------+| trim(both 'cn_' from 'cn_shinejaiecn_')                 |+---------------------------------------------------------+| shinejaie                                               |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> select trim(trailing 'cn_' from 'cn_shinejaiecn_');+---------------------------------------------------------+| trim(trailing 'cn_' from 'cn_shinejaiecn_')             |+---------------------------------------------------------+| cn_shinejaie                                            |+---------------------------------------------------------+1 row in set (0.00 sec)

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.