MySQL 【字符串】函数大全(二)

FIELDFIND_IN_SETFORMATINSERT
INSTRLCASELEFTLENGTH
1、FIELD

FIELD(value, v1, v2, ...) :指定的值在给定的列表中的索引

value: 在列表中要查询的值

v1,v2,...:列表元素

  • FIELD() 函数返回的索引的值从 1 开始。
  • 如果在列表中找不到指定的值,函数返回 0
  • 如果要查找的值为 NULL,函数返回 0
SELECT FIELD('A', 'A', 'B', 'C');
-- 结果
+---------------------------+
| FIELD('A', 'A', 'B', 'C') |
+---------------------------+
|                         1 |
+---------------------------+

SELECT FIELD('D', 'A', 'B', 'C');
-- 结果
+---------------------------+
| FIELD('D', 'A', 'B', 'C') |
+---------------------------+
|                         0 |
+---------------------------+

SELECT FIELD(NULL, 'A', 'B', NULL);
-- 结果
+-----------------------------+
| FIELD(NULL, 'A', 'B', NULL) |
+-----------------------------+
|                           0 |
+-----------------------------+

FIELD函数的第二个功能是按照指定列表排序

例如:学生的等级字段 level 的值使用了 'A+', 'A', 'A-', 'B+', 'B','B-' 列表中的值,如果想按照列表中元素的顺序进行升序排序,则语句如下:

SELECT *
FROM student
ORDER BY FIELD(level, 'A+', 'A', 'A-', 'B+', 'B', 'B-');
2、FIND_IN_SET

FIND_IN_SET(value, string) :返回字符串在一个逗号分隔的字符串列表中的索引

value:要搜索的字符串

string:逗号分割的字符串

注意:

  • 如果在 string中找到value,将返回对应的位置索引。
  • 如果在 string中找不到 value,则返回 0
  • 如果 value为 NULL,将返回 NULL
  • 如果 string为空字符串,将返回 0
  • 如果 string为 NULL,将返回 NULL
SELECT 
  FIND_IN_SET('A', 'A,B,C'),
  FIND_IN_SET('D', 'A,B,C'),
  FIND_IN_SET('D', ''),
  FIND_IN_SET(NULL, 'A,B,C'),
  FIND_IN_SET('D', NULL)

3、FORMAT

FORMAT(num, decimal_places) :将数字四舍五入到指定的小数位数;结果作为字符串返回。

num:要格式化的数字

decimal_places:保留的小数位数

  • 如果参数 num 为字符字符串FORMAT() 将按照如下规则尝试转为数字:
    • 如果以数字开头,则将开头的数字部分转为数字。
    • 如果不能转为数字,则按照 0 处理。
  • 如果参数 num 为 NULL,将会返回 NULL
  • 如果参数 decimal_places 为 0,返回的内容没有小数部分。
SELECT
    FORMAT(123, 2),
    FORMAT(123.111, 2),
    FORMAT(123.111, 0),
    FORMAT('123', 2),
    FORMAT('123A', 2),
    FORMAT('A123', 2),
    FORMAT(NULL, 2)

4、INSERT

INSERT(str, pos, len, newstr) :在一个字符串中插入一个新的字符串,新的字符串会替换源字符串中指定位置开始的指定长度的字符串

str:需要处理的字符串。

pos:开始插入新字符串 newstr 的位置。pos 的值从 1 开始。

len:要被替换的字符的数量。

newstr: 要插入的新字符串。

  • 如果 len 为 0,则直接在 pos 插入字符串,而不进行替换。
  • 如果 pos 不在字符串长度范围内,INSERT() 函数将返回原始字符串。
  • 如果 len 不在字符串从位置 pos 的剩余部分的长度内,INSERT() 函数将从位置 pos 替换字符串的剩余部分。
  • 如果任何参数是 NULLINSERT() 函数将返回 NULL
SELECT INSERT('Hello_World', 6, 1, ' ');
--结果
+----------------------------------+
| INSERT('Hello_World', 6, 1, ' ') |
+----------------------------------+
| Hello World                      |
+----------------------------------+
SELECT
    INSERT(NULL, 6, 1, ' ') null_1,
    INSERT('Hello_World', NULL, 1, ' ') null_2,
    INSERT('Hello_World', 6, NULL, ' ') null_3,
    INSERT('Hello_World', 6, 1, NULL) null_4;

5、INSTR

INSTR(str, sustr) :一个子字符串在一个字符串中第一次出现的位置的索引;不区分大小写

当任意一个参数为 NULL 时, INSTR() 函数将返回 NULL

SELECT
    INSTR('Hello World', 'He') as a,
    INSTR('Hello World', 'he') as b,
    INSTR('Hello World', 'wo') as c,
    INSTR('Hello World', 'go') as d,
    INSTR('Hello World', NULL) as e,
    INSTR(NULL, 'go') as f,
    INSTR(NULL, NULL) as j

6、LCASE

LCASE(str) :将指定字符串转为小写并返回

当参数 str 为 NULL 时, LCASE() 函数将返回 NULL

SELECT LCASE('Hello'), LCASE(NULL);
-- 结果
+----------------+--------------------------+
| LCASE('Hello') | LCASE(NULL)              |
+----------------+--------------------------+
| hello          | NULL                     |
+----------------+--------------------------+

-- 将用户名转为小写
SELECT LCASE(username) FROM member;
7、LEFT

LEFT(str, length) :从字符串的左侧返回指定数量的字符组成的新字符串返回。

  • 如果 length 超出了 str的长度,返回整个str
  • 如果 length 为零或负数,返回一个空串。
  • 当任意一个参数为 NULL 时, 返回 NULL
SELECT
    LEFT('Hello', 1),
    LEFT('Hello', 2),
    LEFT('Hello', 3),
    LEFT('Hello', 0),
    LEFT('Hello', -1),
    LEFT('Hello', NULL),
    LEFT(NULL, NULL)

8、LENGTH

LENGTH(str) :返回指定字符串的以字节为单位的长度

当参数为 NULL 时, LENGTH() 函数将返回 NULL

SELECT
    LENGTH('Hello'),
    LENGTH(''),
    LENGTH(20),
    LENGTH(-20),
    LENGTH(+20),
    LENGTH(NOW()),
    LENGTH(CURDATE()),
    LENGTH('你好'),
    LENGTH(NULL)

  • LENGTH(-20) 的结果是 3。这是因为 -20 对应的字符串是 '-20'LENGTH('-20') 的结果为 3
  • LENGTH(+20) 的结果是 2。这是因为 +20 相当于 20,对应的字符串是 '20'LENGTH('20') 的结果为 2
  • LENGTH(NOW()) 相当于 LENGTH('2021-04-02 21:18:57')
  • LENGTH('你好') 的结果是 6。这是因为我这里用的编码是 UTF-8,其中一个中文字占用 3 个字节。

MySQL 【字符串】函数大全(一)

MySQL 【字符串】函数大全(三)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值