FIELD | FIND_IN_SET | FORMAT | INSERT |
INSTR | LCASE | LEFT | LENGTH |
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
替换字符串的剩余部分。 - 如果任何参数是
NULL
,INSERT()
函数将返回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 个字节。