MySQL必知必會(6):經常使用文本字符串處理函數

編程語言中常用函數來處理一些字符串,數字或者其餘內容。MySQL也是同樣,可使用函數來快速達到一系列的目的。html

在上一篇文章《計算字段的使用》中,咱們提早使用了一個trim函數,來處理字符串兩端的空格。而這篇文章就是專門講解一些實際工做中經常使用函數。sql

原文連接:https://weiya.me/item/67.html編程

函數

MySQL支持如下經常使用函數:編程語言

  • 文本處理函數函數

  • 數值數據處理函數post

  • 日期時間處理函數spa

  • MySQL一些特殊信息,好比版本信息函數postgresql

本篇文章主要介紹:文本處理函數,通常用於處理字符串,好比刪除、填充、轉換大小寫等等操做code

提示: SQL語句具備較強的可移植性。好比在Mysql中使用的SQL語句,搬到postgresql中使用起來問題也不大。可是,在SQL語句中使用的函數可移植性較差,實現相同功能的函數在不一樣DBMS中可能徹底不同。因此若是須要移植SQL要慎重使用函數。htm

準備

首先咱們先創建一個數據表,同時填入一些數據,下面咱們將使用此表

image

-- ----------------------------
-- 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字符串處理函數,及其用法實例

LEFT()

用於返回字符串左側的字符。

該函數有兩個參數,第一個參數爲字符串,第二個參數爲字符串長度。字符串長度爲2,就從字符串的左側截取兩個字符串返回。

SELECT id,LEFT(content,3) AS left_content FROM fun_text WHERE id='1'

image

咱們從上表中返回了id=1的記錄的content字段的左側3個字符

TIP: 該函數還有類似函數RIGHT()用於返回字符串右側的字符,用法相似。

LENGTH()

這個函數很簡單,返回字符串的長度。

SELECT id,LENGTH(content) AS content_length FROM fun_text WHERE id='1'

image

咱們返回了id=1的記錄的content長度爲10

LOCATE()

返回一個字符串在另外一個字符串中第一次出現的位置,若是沒有發現就返回0.

SELECT id,LOCATE('234', content) AS locate_content  FROM fun_text WHERE id='1';

image

以前id=1content字段內容爲1234567890234的起始位置爲2. 因此,若是在開始位置查找到,那麼返回是1而不是0

LOWER()

將字符串所有轉換爲小寫字母

咱們使用id=3的記錄來操做。

SELECT id,LOWER(content) AS lower_content FROM fun_text WHERE id='3';

image

能夠看到,以前的大寫ABC被轉換成了小寫的字母abc

TIP: 該函數還有一個相反函數UPPER()能夠將小寫字母均轉換爲大寫字母

TRIM()

去除字符串兩邊的空格。

此次使用id=4的記錄做爲演示,content字段兩邊包含了空格。

SELECT id,TRIM(content) AS trim_content FROM fun_text WHERE id='4';

image

能夠看到,字符串兩邊的空格都被去除了。

TIP: 還有另外兩個類似函數:一、LTRIM():去除字符串左側空格;二、RTRIM()去除字符串右側空格

SUBSTRING()

字符串截取函數。該函數與LEFT()RIGHT()函數有點兒相似,均可以截取字符串,只不過功能更增強大。

一、從第N個字符串開始截取

SELECT id,SUBSTRING(content,5) AS sub_content FROM fun_text WHERE id='1';

image

咱們使用id=1記錄,截取content字段,而且是從第5個字符串開始截取,因此結果爲567890

二、從第N個字符串開始截取,截取M個字符

SELECT id,SUBSTRING(content,5,2) AS sub_content FROM fun_text WHERE id='1';

image

這個方法去截取字符串是否是有更多的自由

SOUNDEX()

最後說一個不一樣於以前的字符處理函數SOUNDEX(),這個函數能夠將一個單詞的讀音轉換成與它類似的讀音的單詞。簡單的來講,就是講方言轉換爲普通話的意思。這個在搜索中十分的好使。

咱們拿上面的id=5的記錄來舉個例子,記錄的content值爲lee,可是有個方言用戶輸入了lie,不管是模糊查詢仍是精確查詢都是沒法匹配到lee結果,可是使用了soundex函數則能夠改變這些。

SELECT * FROM fun_text WHERE SOUNDEX(content) = SOUNDEX('lie');

image

觀察上面的例子,lie是不等於lee的,可是SOUNDEX(content) = SOUNDEX('lie'),由於lielee的讀音十分類似。

相關文章
相關標籤/搜索