MySQL 字符串函数和运算符--上篇

MySQL 字符串函数和运算符–上篇

1、ASCII(str)

返回字符串最左边字符的ASCII数值,如果str为空字符串则返回0, 如果str为NULL串则返回NULL ,ASCII()适用于 8 位字符。

mysql> SELECT ASCII(''); +-----------+ | ASCII('') | +-----------+ | 0 | +-----------+ 1 row in set (0.00 sec) mysql> SELECT ASCII(NULL); +-------------+ | ASCII(NULL) | +-------------+ | NULL | +-------------+ 1 row in set (0.00 sec) mysql> SELECT ASCII('abc'); +--------------+ | ASCII('abc') | +--------------+ | 97 | +--------------+ 1 row in set (0.00 sec) mysql> SELECT ASCII('Abc'); +--------------+ | ASCII('Abc') | +--------------+ | 65 | +--------------+ 1 row in set (0.00 sec)
2、BIN(N)

当N的值在在bigint范围内的时候,返回这个数字的二进制,如果N等于null,那么返回null。

mysql> select bin(100); +----------+ | bin(100) | +----------+ | 1100100 | +----------+ 1 row in set (0.00 sec) 2^6+2^5+2^2=64+32+4=100 mysql> select bin(null); +-----------+ | bin(null) | +-----------+ | NULL | +-----------+ 1 row in set (0.00 sec)
3、BIT_LENGTH(str)

返回字符串的长度( 以bit为单位)。如果str为空字符串则返回0,如果str是 null则返回 NULL。(1字节=8bit)

mysql> SELECT BIT_LENGTH('abcd'); +--------------------+ | BIT_LENGTH('abcd') | +--------------------+ | 32 | +--------------------+ 1 row in set (0.00 sec) 4*8=32 mysql> SELECT BIT_LENGTH(''); +----------------+ | BIT_LENGTH('') | +----------------+ | 0 | +----------------+ 1 row in set (0.00 sec) mysql> SELECT BIT_LENGTH(null); +------------------+ | BIT_LENGTH(null) | +------------------+ | NULL | +------------------+ 1 row in set (0.00 sec)
4、CHAR(N,… [USING charset_name])

char函数比较复杂,默认不加USING参数是返回整数N对应的16进制值,

mysql> select char(77); +--------------------+ | char(77) | +--------------------+ | 0x4D | +--------------------+ 1 row in set (0.00 sec) 4 * 16^1+ D * 16^0=64+13=77

如果使用USING参数,则返回这个ASCII值

mysql> SELECT CHAR(88 USING utf8mb4); +------------------------+ | CHAR(88 USING utf8mb4) | +------------------------+ | X | +------------------------+ 1 row in set (0.00 sec) mysql> select ascii('X'); +------------+ | ascii('X') | +------------+ | 88 | +------------+ 1 row in set (0.00 sec)

其他情况,如果是null则返回null,如果是0则返回0x00

mysql> SELECT CHAR(null); +------------------------+ | CHAR(null) | +------------------------+ | 0x | +------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHAR(0); +------------------+ | CHAR(0) | +------------------+ | 0x00 | +------------------+ 1 row in set (0.00 sec)
5、CHAR_LENGTH(str)

LENGTH返回的是字节长度,一个汉字等于3个字节,一个字母等于1个字节,空格也算

CHAR_LENGTH返回的是字符长度,一个汉字和一个字母都是1个字符长度,空格也算

mysql> SET @dolphin:='海豚';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin);
+------------------+-----------------------+
| LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) |
+------------------+-----------------------+
|                6 |                     2 |
+------------------+-----------------------+
1 row in set (0.00 sec)

mysql> SET @dolphin:='abc';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin);
+------------------+-----------------------+
| LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) |
+------------------+-----------------------+
|                3 |                     3 |
+------------------+-----------------------+
1 row in set (0.00 sec)
6、CHARACTER_LENGTH(str)

CHARACTER_LENGTH(str) 是CHAR_LENGTH(str)的同义词,两者一样

mysql> SET @dolphin:='海豚'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin), CHARACTER_LENGTH(@dolphin); +------------------+-----------------------+----------------------------+ | LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) | CHARACTER_LENGTH(@dolphin) | +------------------+-----------------------+----------------------------+ | 6 | 2 | 2 | +------------------+-----------------------+----------------------------+ 1 row in set (0.00 sec) mysql> SET @dolphin:='abc'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin), CHARACTER_LENGTH(@dolphin); +------------------+-----------------------+----------------------------+ | LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) | CHARACTER_LENGTH(@dolphin) | +------------------+-----------------------+----------------------------+ | 3 | 3 | 3 | +------------------+-----------------------+----------------------------+ 1 row in set (0.00 sec)
7、CONCAT(str1,str2,…)

连接多个字符串,有null,则返回null

mysql> SELECT CONCAT('My', null, 'QL'); +--------------------------+ | CONCAT('My', null, 'QL') | +--------------------------+ | NULL | +--------------------------+ 1 row in set (0.00 sec) mysql> SELECT CONCAT('My', 'S', 'QL'); +-------------------------+ | CONCAT('My', 'S', 'QL') | +-------------------------+ | MySQL | +-------------------------+ 1 row in set (0.00 sec)
8、CONCAT_WS(separator,str1,str2,…)

用什么把字符串连接起来,这里separator等于’null’和null是两种情况

mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name'); +----------------------------------------------+ | CONCAT_WS(',','First name',NULL,'Last Name') | +----------------------------------------------+ | First name,Last Name | +----------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CONCAT_WS('null','First name',NULL,'Last Name'); +-------------------------------------------------+ | CONCAT_WS('null','First name',NULL,'Last Name') | +-------------------------------------------------+ | First namenullLast Name | +-------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CONCAT_WS(null,'First name',NULL,'Last Name'); +-----------------------------------------------+ | CONCAT_WS(null,'First name',NULL,'Last Name') | +-----------------------------------------------+ | NULL | +-----------------------------------------------+ 1 row in set (0.00 sec)
9、ELT(N,str1,str2,str3,…)

返回第N个字符串,如果N为null,则返回null

mysql> SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd'); +--------------------------------+ | ELT(1, 'Aa', 'Bb', 'Cc', 'Dd') | +--------------------------------+ | Aa | +--------------------------------+ 1 row in set (0.00 sec) mysql> SELECT ELT(3, 'Aa', 'Bb', 'Cc', 'Dd'); +--------------------------------+ | ELT(3, 'Aa', 'Bb', 'Cc', 'Dd') | +--------------------------------+ | Cc | +--------------------------------+ 1 row in set (0.00 sec) mysql> SELECT ELT(null, 'Aa', 'Bb', 'Cc', 'Dd'); +-----------------------------------+ | ELT(null, 'Aa', 'Bb', 'Cc', 'Dd') | +-----------------------------------+ | NULL | +-----------------------------------+ 1 row in set (0.00 sec)

如果N是小数,则四舍五入

mysql> SELECT ELT(1.4, 'Aa', 'Bb', 'Cc', 'Dd'); +----------------------------------+ | ELT(1.4, 'Aa', 'Bb', 'Cc', 'Dd') | +----------------------------------+ | Aa | +----------------------------------+ 1 row in set (0.00 sec) mysql> SELECT ELT(1.8, 'Aa', 'Bb', 'Cc', 'Dd'); +----------------------------------+ | ELT(1.8, 'Aa', 'Bb', 'Cc', 'Dd') | +----------------------------------+ | Bb | +----------------------------------+ 1 row in set (0.00 sec)
10、EXPORT_SET(bits,on,off[,separator[,number_of_bits]])

今日最难!

首先简化函数为EXPORT_SET(bits, on, off, separator, length)

参数解释:
bits:必需的。一个数字。将 bits 转为二进制并反转后的各个位的值决定 on 还是 off 出现在该位置。
on:必需的。当位值为 1 时使用的字符串。
off:必需的。当位值为 0 时使用的字符串。
separator:可选的。分隔符或者分隔字符串,默认值为 ,。
length:可选的。集合的元素的个数,默认值为 64。

返回值
EXPORT_SET() 函数根据 bits 对应的二进制并反转后的值挑选对应的字符串,并返回一个逗号分隔的字符串集合。

比如

mysql> SELECT EXPORT_SET(12,'A','B','-',20); +-----------------------------------------+ | EXPORT_SET(12,'A','B','-',20) | +-----------------------------------------+ | B-B-A-A-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B | +-----------------------------------------+ 1 row in set (0.00 sec)

bits = 12, 12的二进制位 1100, 总长度为 4,所以不用补0(如果不足4位的,需要左边补 0)。然后反转变为 0011。

按 0011中的每位的值使用 on 或者 off:

第一位为 0,则使用 B。
第二位为 0,则使用 B。
第三位为 1,则使用 A。
第四位为 1,则使用 A。
最后将所有的字符串使用分隔符 - 组合起来,即:B-B-A-A。

length长度为20,则0011补位为0011 0000 0000 0000 0000,替换on和off。则为

BBAA BBBB BBBB BBBB BBBB

再用-符号连接,则为

B-B-A-A-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B


免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论