編程語言中常用函數來處理一些字符串,數字或者其餘內容。MySQL
也是同樣,可使用函數來快速達到一系列的目的。html
在上一篇文章《計算字段的使用》中,咱們提早使用了一個trim
函數,來處理字符串兩端的空格。而這篇文章就是專門講解一些實際工做中經常使用函數。sql
原文連接:https://weiya.me/item/67.html編程
MySQL
支持如下經常使用函數:編程語言
文本處理函數函數
數值數據處理函數post
日期時間處理函數spa
MySQL
一些特殊信息,好比版本信息函數postgresql
本篇文章主要介紹:文本處理函數,通常用於處理字符串,好比刪除、填充、轉換大小寫等等操做code
提示: SQL
語句具備較強的可移植性。好比在Mysql
中使用的SQL
語句,搬到postgresql
中使用起來問題也不大。可是,在SQL
語句中使用的函數可移植性較差,實現相同功能的函數在不一樣DBMS
中可能徹底不同。因此若是須要移植SQL
要慎重使用函數。htm
首先咱們先創建一個數據表,同時填入一些數據,下面咱們將使用此表
-- ---------------------------- -- Table structure for fun_text -- ---------------------------- DROP TABLE IF EXISTS `fun_text`; CREATE TABLE `fun_text` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of fun_text -- ---------------------------- INSERT INTO `fun_text` VALUES ('1', '1234567890'); INSERT INTO `fun_text` VALUES ('2', 'abc'); INSERT INTO `fun_text` VALUES ('3', 'ABC'); INSERT INTO `fun_text` VALUES ('4', ' abc '); INSERT INTO `fun_text` VALUES ('5', 'lee');
下面咱們直接列舉一些經常使用MySQL
字符串處理函數,及其用法實例
用於返回字符串左側的字符。
該函數有兩個參數,第一個參數爲字符串,第二個參數爲字符串長度。字符串長度爲2,就從字符串的左側截取兩個字符串返回。
SELECT id,LEFT(content,3) AS left_content FROM fun_text WHERE id='1'
咱們從上表中返回了id=1
的記錄的content
字段的左側3個字符
TIP: 該函數還有類似函數RIGHT()
用於返回字符串右側的字符,用法相似。
這個函數很簡單,返回字符串的長度。
SELECT id,LENGTH(content) AS content_length FROM fun_text WHERE id='1'
咱們返回了id=1
的記錄的content
長度爲10
返回一個字符串在另外一個字符串中第一次出現的位置,若是沒有發現就返回0
.
SELECT id,LOCATE('234', content) AS locate_content FROM fun_text WHERE id='1';
以前id=1
的content
字段內容爲1234567890
,234
的起始位置爲2
. 因此,若是在開始位置查找到,那麼返回是1
而不是0
將字符串所有轉換爲小寫字母
咱們使用id=3
的記錄來操做。
SELECT id,LOWER(content) AS lower_content FROM fun_text WHERE id='3';
能夠看到,以前的大寫ABC
被轉換成了小寫的字母abc
TIP: 該函數還有一個相反函數UPPER()
能夠將小寫字母均轉換爲大寫字母
去除字符串兩邊的空格。
此次使用id=4
的記錄做爲演示,content
字段兩邊包含了空格。
SELECT id,TRIM(content) AS trim_content FROM fun_text WHERE id='4';
能夠看到,字符串兩邊的空格都被去除了。
TIP: 還有另外兩個類似函數:一、LTRIM()
:去除字符串左側空格;二、RTRIM()
去除字符串右側空格
字符串截取函數。該函數與LEFT()
和RIGHT()
函數有點兒相似,均可以截取字符串,只不過功能更增強大。
一、從第N
個字符串開始截取
SELECT id,SUBSTRING(content,5) AS sub_content FROM fun_text WHERE id='1';
咱們使用id=1
記錄,截取content
字段,而且是從第5
個字符串開始截取,因此結果爲567890
二、從第N
個字符串開始截取,截取M
個字符
SELECT id,SUBSTRING(content,5,2) AS sub_content FROM fun_text WHERE id='1';
這個方法去截取字符串是否是有更多的自由
最後說一個不一樣於以前的字符處理函數SOUNDEX()
,這個函數能夠將一個單詞的讀音轉換成與它類似的讀音的單詞。簡單的來講,就是講方言轉換爲普通話的意思。這個在搜索中十分的好使。
咱們拿上面的id=5
的記錄來舉個例子,記錄的content
值爲lee
,可是有個方言用戶輸入了lie
,不管是模糊查詢仍是精確查詢都是沒法匹配到lee
結果,可是使用了soundex
函數則能夠改變這些。
SELECT * FROM fun_text WHERE SOUNDEX(content) = SOUNDEX('lie');
觀察上面的例子,lie
是不等於lee
的,可是SOUNDEX(content) = SOUNDEX('lie')
,由於lie
和lee
的讀音十分類似。