实时警报通知:微信告警通知的重要性解析
873
2022-11-03
MySQL的函数和运算符 - 字符串函数和运算符(1)
字符串函数和运算符
如果结果的长度大于 max_allowed_packet 系统变量的值,则字符串值函数返回 NULL。
对于操作字符串位置的函数,第一个位置编号为 1。
对于采用长度参数的函数,非整数参数将舍入到最接近的整数。
● ASCII(str)
返回字符串 str 最左边字符的数值。如果 str 为空(长度为0)字符串,则返回 0。如果 str 为 NULL,则返回 NULL。ASCII() 适用于 8 位字符(8位2进制能表示的字符)。
mysql> SELECT ASCII('2'); -> 50mysql> SELECT ASCII(2); -> 50mysql> SELECT ASCII('dx'); -> 100
● BIN(N)
返回二进制值 N 的字符串表示形式,其中 N 是长长整型(BIGINT)。相当于 CONV(N,10,2)。如果 N 为 NULL,则返回 NULL。
mysql> SELECT BIN(12); -> '1100'
● BIT_LENGTH(str)
返回字符串 str 的长度(位数)。
mysql> SELECT BIT_LENGTH('text'); -> 32
● CHAR(N,... [USING charset_name])
CHAR() 将每个参数 N 作为整数解释,并返回由这些整数的代码值给定的字符组成的字符串。跳过 NULL 值。
mysql> SELECT CHAR(77,121,83,81,'76'); -> 'MySQL'mysql> SELECT CHAR(77,77.3,'77.3'); -> 'MMM'
大于 255 的 CHAR() 参数将转换为多个结果字节。例如,CHAR(256) 等价于 CHAR(1,0),CHAR(256*256) 等价于 CHAR(1,0,0):
mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256));+----------------+----------------+| HEX(CHAR(1,0)) | HEX(CHAR(256)) |+----------------+----------------+| 0100 | 0100 |+----------------+----------------+mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));+------------------+--------------------+| HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) |+------------------+--------------------+| 010000 | 010000 |+------------------+--------------------+
默认情况下,CHAR() 返回一个二进制字符串。要生成给定字符集的字符串,请使用可选的 USING 子句:
mysql> SELECT CHARSET(CHAR(X'65')), CHARSET(CHAR(X'65' USING utf8));+----------------------+---------------------------------+| CHARSET(CHAR(X'65')) | CHARSET(CHAR(X'65' USING utf8)) |+----------------------+---------------------------------+| binary | utf8 |+----------------------+---------------------------------+
如果给定 USING 并且结果字符串对于给定的字符集是非法的,则发出警告。此外,如果启用了严格 SQL 模式,CHAR() 的结果将变为 NULL。
如果从 mysql 客户端中调用 CHAR(),则二进制字符串将使用十六进制表示法显示,具体取决于 --binary-as-hex 的值。
● CHAR_LENGTH(str)
返回字符串 str 的长度,以字符为单位(即多少个字符)。多字节字符计为单个字符。这意味着,对于包含五个 2 字节字符的字符串,LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。
● CHARACTER_LENGTH(str)
CHARACTER_LENGTH() 是 CHAR_LENGTH() 的同义词。
● CONCAT(str1,str2,...)
把所有参数连接成一个字符串,然后作为结果返回。可能有一个或多个参数。如果所有参数都是非二进制字符串,则结果是非二进制字符串。如果参数包含任何二进制字符串,则结果是二进制字符串。数值参数将转换为其对应的非二进制字符串形式。
如果任何参数为 NULL,CONCAT() 将返回 NULL。
mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL'mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULLmysql> SELECT CONCAT(14.3); -> '14.3'
对于带引号的字符串,可以通过将字符串相邻放置来执行连接:
mysql> SELECT 'My' 'S' 'QL'; -> 'MySQL'
如果从 mysql 客户端中调用 CONCAT(),则二进制字符串结果将使用十六进制表示法显示,具体取决于 --binary-as-hex 的值。
● CONCAT_WS(separator,str1,str2,...)
CONCAT_WS() 表示用分隔符连接,是 CONCAT() 的一种特殊形式。第一个参数是其余参数的分隔符。分隔符添加在要连接的字符串之间。分隔符可以是字符串。如果分隔符为 NULL,则结果为 NULL。
mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name'); -> 'First name,Second name,Last Name'mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name'); -> 'First name,Last Name'
CONCAT_WS() 不忽略空(零长度)字符串。但是,它会跳过分隔符参数之后的任何 NULL 值。
● ELT(N,str1,str2,str3,...)
ELT() 返回字符串列表的第 N 个元素:如果 N = 1,则返回 str1;如果 N = 2,则返回 str2,依此类推。如果 N 小于 1 或大于参数数量,则返回 NULL。ELT() 是对 FIELD() 函数的补充。
mysql> SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Aa'mysql> SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Dd'
● EXPORT_SET(bits,on,off[,separator[,number_of_bits]])
返回一个字符串,对于值 bits 中设置为 1 的每一位,会得到一个 on 字符串,对于值中设置为 0 的每一位,会得到一个 off 字符串。从右到左(从低位到高位)检查 bits 中的位。字符串从左到右添加到结果中,由 separator 字符串分隔(默认为逗号字符 ,)。检查的位数由 number_of_bits 给出,如果未指定,则默认值为 64。如果大于 64,则 number_of_bits 会自动缩减为 64。它被视为无符号整数,因此 −1 实际效果与 64 相同。
mysql> SELECT EXPORT_SET(5,'Y','N',',',4); -> 'Y,N,Y,N'mysql> SELECT EXPORT_SET(6,'1','0',',',10); -> '0,1,1,0,0,0,0,0,0,0'
● FIELD(str,str1,str2,str3,...)
返回 str 在 str1, str2, str3, ... 列表中的索引(位置)。如果找不到 str,则返回 0。
如果 FIELD() 的所有参数都是字符串,则将所有参数作为字符串进行比较。如果所有参数都是数字,则它们将作为数字进行比较。否则,参数将作为双精度类型进行比较。
如果 str 为 NULL,则返回值为 0,因为 NULL 无法与任何值进行相等比较。FIELD() 是对 ELT() 函数的补充。
mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 2mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 0
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
发表评论
暂时没有评论,来抢沙发吧~