Mysql内置函数整理--基础类型函数
基于Mysql 8.0
运算符
运算符 | 说明 | 示例 | 引入 | 废弃 |
---|---|---|---|---|
& | 二进制AND | |||
> | 大于 | |||
>> | 右移 | |||
>= | 大于等于 | |||
< | 小于 | |||
<> , != | 不等于 | |||
<< | 左移 | |||
<= | 小于等于 | |||
<=> | NULL安全的等于 | SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; 输出1,1,0 (a, b) <=> (x, y)等同于(a <=> x) AND (b <=> y) | ||
% , MOD | 取模 | |||
* | 乘以 | |||
+ | 加 | |||
- | 减 | |||
- | 负号 | |||
-> | Return value from JSON column after evaluating path; equivalent to JSON_EXTRACT(). | |||
->> | Return value from JSON column after evaluating path and unquoting the result; equivalent to JSON_UNQUOTE(JSON_EXTRACT()). | |||
/ | 除以 | select 2/3; 输出:0.667 | ||
:= | 赋值 | |||
= | 赋值 (在 SET or SET in UPDATE 语句) | |||
= | 等于 | |||
^ | 二进制异或 | |||
AND , && | 逻辑and | |||
BETWEEN ... AND ... | ||||
BINARY | 8.0.27 | |||
DIV | 整数除。返回结果为整数。向下去整数。 | select 2 div 3;输出:0 | ||
IN() | in | |||
IS | 测试一个变量是给定boolean值。boolean值可以是:TRUE, FALSE`, 或者 UNKNOWN | SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN; 输出:1, 1, 1 | ||
IS NOT | 测试一个变量不是给定boolean值。 | SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN; 1, 1, 0 | ||
IS NOT NULL | NOT NULL value test | |||
IS NULL | NULL value test | |||
LIKE | ||||
MEMBER OF() | 如果第一个参数匹配第二个参数( json数组)的任何一个元素,则返回true(1),否则返回false(0)。 | SELECT 17 MEMBER OF(‘[23, “abc”, 17, “ab”, 10]’); 输出:1 | 8.0.17 | |
NOT , ! | 取反 | |||
NOT BETWEEN ... AND ... | ||||
NOT IN() | ||||
NOT LIKE | ||||
NOT REGEXP | ||||
[`OR`, ` | `](https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_or) | |||
REGEXP | 字符串匹配正则表达式。expr REGEXP pat | |||
RLIKE | 字符串匹配正则表达式。与REGEXP是同义词。 | |||
SOUNDS LIKE | Compare sounds。expr1 SOUNDS LIKE expr2 等同于SOUNDEX(expr1) = SOUNDEX(expr2) | |||
XOR | ||||
[` | `](https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_bitwise-or) | |||
~ | 二进制取反 |
参考:https://dev.mysql.com/doc/refman/8.0/en/non-typed-operators.html
控制流函数
参考:https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html
- CASE
CASE value
WHEN compare_value THEN result
[WHEN compare_value THEN result ...]
[ELSE result]
END
CASE
WHEN condition THEN result
[WHEN condition THEN result ...] [ELSE result]
END
返回值类型是所有分支返回类型的聚合类型。具体见文档。
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
-> WHEN 2 THEN 'two' ELSE 'more' END;
-> 'one'
mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
-> 'true'
mysql> SELECT CASE BINARY 'B'
-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
-> NULL
- IF
-- 如果expr1为true,则返回 expr2,否则返回expr3
IF(expr1,expr2,expr3)
mysql> SELECT IF(1>2,2,3);
-> 3
mysql> SELECT IF(1<2,'yes','no');
-> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'
- IFNULL
-- 如果expr1 不为null,则返回expr1,否则返回expr2。
IFNULL(expr1,expr2)
- NULLIF
-- 如果 expr1=expr2,则返回NULL。否则返回expr1。
NULLIF(expr1,expr2)
mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1
数学函数
参考:https://dev.mysql.com/doc/refman/8.0/en/numeric-functions.html
函数 | 说明 | 示例 |
---|---|---|
ABS() | 绝对值 | |
ACOS() | arc cosine | |
ASIN() | arc sine | |
ATAN() | arc tangent | |
ATAN2() , ATAN() | ||
CEIL() | 返回不小于给定数的最小整数 | SELECT CEILING(1.23),CEILING(-1.23); 输出:2 -1 |
CEILING() | CEIL()同义词 | |
CONV() | 不同进制进行转换 | SELECT CONV(‘a’,16,2), CONV(‘6E’,18,8);输出:1010 172 |
COS() | ||
COT() | ||
CRC32() | CRC32计算 | |
DEGREES() | 转换弧度为度数 | SELECT DEGREES(PI()), DEGREES(PI() / 2);输出:180 90 |
DIV | 整数除 | |
EXP() | 返回自然常数e的x次幂 | SELECT EXP(2); 输出:7.38905609893065 |
FLOOR() | 返回不大于给定数的最大整数 | SELECT FLOOR(1.23), FLOOR(-1.23);输出:1 -2 |
LN() | 返回给定数的自然对数。小于0的数返回null。 | SELECT LN(2), LN(-2);输出:0.6931471805599453 null |
LOG() | 返回给定数指定底数的对数。LOG(X), LOG(B,X)。仅指定一个参数,则以e作为底数。 | SELECT LOG(2),LOG(2,65536),LOG(10,100);输出:0.6931471805599453 16 2 |
LOG10() | 返回以10为底的对数 | |
LOG2() | 返回以2位第的对数 | |
MOD() | 取模 | |
PI() | 返回PI值。 | |
POW() | POW(X,Y),返回X的Y次幂 | |
POWER() | POW 同义词 | |
RADIANS() | 返回给定度数对应的弧度。 | |
RAND() | 返回一个随机数。[0.0 ,1.0) | |
ROUND() | ROUND(X), ROUND(X,D)。D不指定则为0。D的绝对值最大为30。D可为负数。四舍五入近似到指定小数位数, | SELECT ROUND(-1.58,1),truncate(-1.58,1),ROUND(1.58,1),truncate(1.58,1) 输出:-1.6 -1.5 1.6 1.5 |
SIGN() | 返回数的符号。1,0,-1 | SELECT SIGN(-32) ,SIGN(0),SIGN(234);输出:-1 0 1 |
SIN() | sin | |
SQRT() | 返回平方根。负数返回null。 | SELECT SQRT(4);输出:2 |
TAN() | tan | |
TRUNCATE() | 截断数字到指定位数小数。当小数位是负数时,往左移。 | SELECT TRUNCATE(5.4567,3),TRUNCATE(5.4567,2),TRUNCATE(5.4533,2),TRUNCATE(122,-2); 输出:5.456 5.45 5.45 100 |
日期和时间函数
参考:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
函数 | 描述 | 示例 |
---|---|---|
ADDDATE() | ADDDATE(date,INTERVAL expr unit), ADDDATE(date,days)。 当使用inteval方式时,ADDDATE()和DATE_ADD()是同义词。 days 参数如果是小数,则采用四舍五入取整。 | SELECT DATE_ADD(‘2008-01-02’, INTERVAL 31 DAY) ,ADDDATE(‘2008-01-02’, 0.49) ,ADDDATE(‘2008-01-02’, INTERVAL 31 DAY) 输出:2008-02-02 2008-01-02 2008-02-02 |
ADDTIME() | ADDTIME(expr1,expr2)。把expr2加到expr1。expr2必须是个time类型。 | SELECT ADDTIME(‘2007-12-31 23:59:59.999999’, ‘1 1:1:1.000002’); 输出:2008-01-02 01:01:01.000001 |
CONVERT_TZ() | CONVERT_TZ(dt,from_tz,to_tz),把时间从一个时区转换为另一个时区。 | SELECT CONVERT_TZ(‘2004-01-01 12:00:00’,‘GMT’,‘MET’),CONVERT_TZ(‘2004-01-01 12:00:00’,‘+00:00’,‘+8:00’); 输出:2004-01-01 13:00:00 , 2004-01-01 20:00:00 |
CURDATE() | 返回当前日期。格式YYYY-MM-DD(string类型),YYYYMMDD(数字类型) | SELECT CURDATE() , CURDATE() + 0; output:2022-09-07 20220907 |
CURRENT_DATE() , CURRENT_DATE | CURDATE()同义词 | |
CURRENT_TIME() , CURRENT_TIME | CURTIME()同义词 | |
CURRENT_TIMESTAMP() , CURRENT_TIMESTAMP | NOW()同义词 | |
CURTIME() | CURTIME([fsp])。fsp小数部分,0~6。 当前时间(不包括日期)。格式:‘hh:mm:ss’ , hhmmss | |
DATE() | DATE(expr)。返回日期部分。 | |
DATE_ADD() | DATE_ADD(date,INTERVAL expr unit)。 | |
DATE_FORMAT() | DATE_FORMAT(date,format) | |
DATE_SUB() | DATE_SUB(date,INTERVAL expr unit) | |
DATEDIFF() | DATEDIFF(expr1,expr2)。返回expr1 − expr2的日期部分的差。仅对日期部分运算,不考虑时间部分。 | SELECT DATEDIFF(‘2007-12-31 00:00:01’,‘2007-12-30 23:59:59’); output:1 |
DAY() | DAYOFMONTH()同义词 | |
DAYNAME() | DAYNAME(date)。返回日期是周几的名称 | SELECT DAYNAME(‘2007-02-03’); output:Saturday |
DAYOFMONTH() | DAYOFMONTH(date)。返回日期的DAY部分 | |
DAYOFWEEK() | DAYOFWEEK(date)。返回日期是周几的序号,1~7(周日到周六) | SELECT DAYOFWEEK (‘2007-02-03’);output:7 |
DAYOFYEAR() | 返回日期是当前的第几天 (1-366) | |
EXTRACT() | EXTRACT(unit FROM date)。抽取日期的指定部分 | SELECT EXTRACT(YEAR FROM ‘2019-07-02’); output:2019 |
FROM_DAYS() | 转换一个数字成date类型,366位0001-01-01。 | SELECT FROM_DAYS(365),FROM_DAYS(366),FROM_DAYS(738780); OUTPUT:0000-00-00 0001-01-01 2022-09-17 |
FROM_UNIXTIME() | FROM_UNIXTIME(unix_timestamp[,format]),Unix时间戳转日期。从1970-01-01开始,以秒为单位。会转换为本地时间。 | SELECT FROM_UNIXTIME(0); output:1970-01-01 08:00:00 |
GET_FORMAT() | 获取格式化串。系统内部定义的格式串。 | |
HOUR() | 抽取时间部分 | |
LAST_DAY | LAST_DAY(date)。某月最后一天。 | |
LOCALTIME() , LOCALTIME | NOW()同义词 | |
LOCALTIMESTAMP , LOCALTIMESTAMP() | NOW()同义词 | |
MAKEDATE() | MAKEDATE(year,dayofyear)。构造日期 | SELECT MAKEDATE(2011,31), MAKEDATE(2011,32); OUTPUT:2011-01-31 2011-02-01 |
MAKETIME() | MAKETIME(hour,minute,second)。构造TIME | |
MICROSECOND() | 返回毫秒部分 | |
MINUTE() | 返回分钟部分 | |
MONTH() | 返回月份部分。1~12。 | |
MONTHNAME() | 返回月份名称 | |
NOW() | NOW([fsp])。fsp小数位数。返回当前时间。格式:‘YYYY-MM-DD hh:mm:ss’ 或者YYYYMMDDhhmmss | |
PERIOD_ADD() | PERIOD_ADD(P,N)。P格式:YYMM 或者YYYYMM,N月数。给一个年月加上指定月份。 | SELECT PERIOD_ADD(200801,2);OUTPUT:200803 |
PERIOD_DIFF() | PERIOD_DIFF(P1,P2)。返回2个年月数据的月份差:P1-P2 | SELECT PERIOD_DIFF(200802,200703); OUTPUT:11 |
QUARTER() | 返回给定日期的季度。值为1~4。 | |
SEC_TO_TIME() | 转换给定秒数为TIME表示。 ‘hh:mm:ss’ 或hhmmss,没有前导0。 | |
SECOND() | 返回秒 (0-59) | |
STR_TO_DATE() | STR_TO_DATE(str,format)。转换str到date。 | SELECT STR_TO_DATE(‘01,5,2013’,‘%d,%m,%Y’); OUTPUT:‘2013-05-01’ |
SUBDATE() | SUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)。三个参数时,为DATE_SUB() 的同义词。 | |
SUBTIME() | SUBTIME(expr1,expr2)。expr2是个time类型。 | SELECT SUBTIME(‘2007-12-31 23:59:59.999999’,‘1 1:1:1.000002’); OUTPUT: ‘2007-12-30 22:58:58.999997’ |
SYSDATE() | SYSDATE([fsp])。返回当前时间。 | |
TIME() | TIME(expr)。返回日期时间部分。 | |
TIME_FORMAT() | 格式化时间。 | |
TIME_TO_SEC() | 时间转化为秒数。 | |
TIMEDIFF() | TIMEDIFF(expr1,expr2)。expr1 − expr2。 | SELECT TIMEDIFF(‘2000-01-01 00:00:00’, ‘2000-01-01 00:00:00.000001’); OUTPUT: ‘-00:00:00.000001’ |
TIMESTAMP() | TIMESTAMP(expr), TIMESTAMP(expr1,expr2)。一个参数则返回一个datetime。2个参数则返回2个参数的和,第2个参数是time。 | |
TIMESTAMPADD() | TIMESTAMPADD(unit,interval,datetime_expr) | |
TIMESTAMPDIFF() | TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)。datetime_expr2 − datetime_expr1 | |
TO_DAYS() | TO_DAYS(date)。返回给定日期从0000-01-01的天数。1582年之前的结果不可信。 | |
TO_SECONDS() | TO_SECONDS(expr)。返回给定日期从0000-01-01的秒数。1582年之前的结果不可信。 | |
UNIX_TIMESTAMP() | UNIX_TIMESTAMP([date]) | |
UTC_DATE() | UTC_DATE, UTC_DATE() | |
UTC_TIME() | UTC_TIME, UTC_TIME([fsp]) | |
UTC_TIMESTAMP() | UTC_TIMESTAMP, UTC_TIMESTAMP([fsp]) | |
WEEK() | WEEK(date[,mode])。返回是当前的第几周。 | |
WEEKDAY() | WEEKDAY(date)。返回是星期几。(0 = Monday, 1 = Tuesday, … 6 = Sunday) | |
WEEKOFYEAR() | WEEKOFYEAR(date)。返回是当年第几周。等同于WEEK(date,3)。 | |
YEAR() | YEAR(date) | |
YEARWEEK() | YEARWEEK(date), YEARWEEK(date,mode) | SELECT YEARWEEK(‘1987-01-01’); 输出: 198652。表示1986年第52周。 |
SYSDATE()与NOW()区别
SYSDATE()与NOW()返回值一样。不同之处在于在同一个statement中的处理。NOW() 在同一个查询中,返回同一个值。SYSDATE()返回每次调用的值。
select a , now(),sleep(1),now()
from (
select '1' as a union all select '2' as a
) u
-- NOW()值一样。
1 2022-09-07 16:29:13 0 2022-09-07 16:29:13
2 2022-09-07 16:29:13 0 2022-09-07 16:29:13
select a , sysdate(),sleep(1),sysdate()
from (
select '1' as a union all select '2' as a
) u
-- sysdate()值不一样。
1 2022-09-07 16:30:18 0 2022-09-07 16:30:19
2 2022-09-07 16:30:19 0 2022-09-07 16:30:20
字符串函数
参考: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html , https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-instr
函数 | 说明 | 示例 |
---|---|---|
ASCII() | ASCII(str)。返回字符串左边字符的ASCII码。 | SELECT ASCII(‘dx’); OUTPUT:100 |
BIN() | 返回整数的二进制表示,等同CONV(N,10,2)。 | |
BIT_LENGTH() | 返回字符串占多少位(bit) | SELECT BIT_LENGTH(‘text’); OUTPUT:32 |
CHAR() | CHAR(N,… [USING charset_name])。返回给定整数的char,连成一个字符串 | SELECT CHAR(77,121,83,81,‘76’ USING utf8mb4); 输出:MySQL |
CHAR_LENGTH() | CHAR_LENGTH(str)。返回字符串有多少个字符,不考虑内部编码。 | |
CHARACTER_LENGTH() | CHAR_LENGTH()同义词 | |
CONCAT() | 连接多个字符串。 | |
CONCAT_WS() | CONCAT_WS(separator,str1,str2,…)。用指定分隔符连接多个字符串。 | |
ELT() | ELT(N,str1,str2,str3,…)。返回指定index的字符串。 | |
EXPORT_SET() | EXPORT_SET(bits,on,off[,separator[,number_of_bits]])。返回整数指各位的值。 | SELECT EXPORT_SET(6,‘1’,‘0’,‘,’,10); ‘0,1,1,0,0,0,0,0,0,0’ |
FIELD() | FIELD(str,str1,str2,str3,…)。返回str的index。 | SELECT FIELD(‘Bb’, ‘Aa’, ‘Bb’, ‘Cc’, ‘Dd’, ‘Ff’) 2 |
FIND_IN_SET() | FIND_IN_SET(str,strlist)。 | SELECT FIND_IN_SET(‘b’,‘a,b,c,d’); 2 |
FORMAT() | FORMAT(X,D[,locale]) | |
FROM_BASE64() | FROM_BASE64(str) | |
HEX() | HEX(str), HEX(N) | |
INSERT() | INSERT(str,pos,len,newstr) | |
INSTR() | INSTR(str,substr)。与LOCALE(substr,str)一样。 | |
LCASE() | =LOWER()同义词 | |
LEFT() | LEFT(str,len) | |
LENGTH() | LENGTH(str)。返回字符串占用的字节数。 | |
LIKE | ||
LOAD_FILE() | LOAD_FILE(file_name)。 | UPDATE t SET blob_col=LOAD_FILE(‘/tmp/picture’) WHERE id=1; |
LOCATE() | LOCATE(substr,str), LOCATE(substr,str,pos) | |
LOWER() | 转小写字符 | |
LPAD() | LPAD(str,len,padstr)。给字符串str加前导padStr(指定长度) | SELECT LPAD(‘hi’,4,‘??’) ‘??hi’ SELECT LPAD(‘hi’,1,‘??’); ‘h’ |
LTRIM() | 移除左空格。 | |
MAKE_SET() | MAKE_SET(bits,str1,str2,…)。bits参数用于决定选择那些字符串,以bits二进制位上是否为1来决定是否选择对应索引的字符串。 | SELECT MAKE_SET(5,‘hello’,‘nice’,‘world’); 输出:hello,world |
MATCH() | Perform full-text search | |
MID() | MID(str,pos,len) 等同于 SUBSTRING(str,pos,len)。 | |
NOT LIKE | Negation of simple pattern matching | |
NOT REGEXP | Negation of REGEXP | |
OCT() | OCT(N),返回BIGINT型N的八进制字符串。 | |
OCTET_LENGTH() | 等同于LENGTH() | |
ORD() | ORD(str)。返回第一个字符的 ORD,如果是单字节字符,则返回ACSII。否则:(1st byte code)+ (2nd byte code * 256)+ (3rd byte code * 256^2) … | |
POSITION() | 等同于 LOCATE() | |
QUOTE() | 给字符串加单引号 | SELECT QUOTE(‘Don’t!’) as a ,‘Don’t!’ as b; OUTPUT: ‘Don’t!’ Don’t! |
REGEXP | Whether string matches regular expression | |
REGEXP_INSTR() | REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]]) | |
REGEXP_LIKE() | REGEXP_LIKE(expr, pat[, match_type]) | |
REGEXP_REPLACE() | REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]]) | |
REGEXP_SUBSTR() | REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]]) | |
REPEAT() | REPEAT(str,count)。重复字符串n次。 | |
REPLACE() | REPLACE(str,from_str,to_str) | |
REVERSE() | REVERSE(str)。反转字符串。 | |
RIGHT() | RIGHT(str,len)。返回右边n个字符。 | |
RLIKE | Whether string matches regular expression | |
RPAD() | RPAD(str,len,padstr)。右边补充字符到len长度。 | SELECT RPAD(‘hi’,5,‘?’),RPAD(‘hi’,1,‘?’); OUTPUT:hi??? h |
RTRIM() | RTRIM(str)。 | |
SOUNDEX() | SOUNDEX(str) | |
SOUNDS LIKE | expr1 SOUNDS LIKE expr2。等同于:SOUNDEX(expr1) = SOUNDEX(expr2) | |
SPACE() | SPACE(N) | |
STRCMP() | Compare two strings | |
SUBSTR() | 等同于SUBSTRING() | |
SUBSTRING() | SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len) | |
SUBSTRING_INDEX() | SUBSTRING_INDEX(str,delim,count)。返回指定分隔符第count次出现之前的子串。count为负数时,从右边开始数,返回到字符串尾部的子串。 | SELECT SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, 2), SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, -2); OUTPUT:www.mysql mysql.com |
TO_BASE64() | TO_BASE64(str) | |
TRIM() | TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str) | SELECT TRIM(TRAILING ‘xyz’ FROM ‘barxxyz’); OUTPUT:‘barx’ |
UCASE() | 等同于 UPPER() | |
UNHEX() | UNHEX(str)。16进制转字符串。 | |
UPPER() | ||
WEIGHT_STRING() | WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags]) |
说明
-
SOUNDEX
SOUNDEX()函数用于返回字符串的语音表示形式
-
WEIGHT_STRING
WEIGHT_STRING()函数来查找字符串的权重。字符。该函数以二进制字符串形式返回表示重量的值。因此,我们需要使用 HEX(WEIGHT_STRING(str))函数以可打印的形式显示重量。
权重主要用于比较字符。
SELECT HEX(WEIGHT_STRING('AaBbCc' ) ) AS Weight; -- OUTPUT: 004100410042004200430043 SELECT HEX(WEIGHT_STRING(BINARY 'AaBbCc')) AS Weight; -- OUTPUT: 416142624363
类型转换
CAST
CAST(expr AS type [ARRAY])
-- MYSQL8.0.22支持。
CAST(timestamp_value AT TIME ZONE timezone_specifier AS DATETIME[(precision)])
Convert
CONVERT(expr USING transcoding_name)
CONVERT(expr,type)
CONVERT(expr USING transcoding_name)
用于把数据转换为不同的字符集。
SELECT CONVERT('abc' USING utf8mb4);
-- OUTPUT
abc
SELECT CONVERT(_latin1'Müller' USING utf8mb4);
-- OUTPUT:
Müller
数据类型的转换
CAST(expr AS type [ARRAY])
等同于 CONVERT(expr,type)
把一个表达式转化为另一种数据类型。
type支持的类型:
- BINARY[(N)]
- CHAR[(N)] [charset_info]
- DATE
- DATETIME[(M)]
- DECIMAL[(M[,D])]
- DOUBLE
- FLOAT[§]
- JSON (mysql 8.0)
- NCHAR[(N)]
- REAL
- SIGNED [INTEGER]
- spatial_type(MySQL 8.0.24)
- TIME[(M)]
- UNSIGNED [INTEGER]
- YEAR(MySQL 8.0.22)
- AT TIME ZONE(MySQL 8.0.22)
位操作函数
参考:https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html
Name | Description |
---|---|
& | Bitwise AND |
>> | Right shift |
<< | Left shift |
^ | Bitwise XOR |
BIT_COUNT() | 返回二进制位被设置为1的位数。 |
[` | `](https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_bitwise-or) |
~ | Bitwise inversion |
SELECT 127 | 128, 128 << 2, BIT_COUNT(15);
-- OUTPUT:
255 512 4
SELECT X'40' | X'01', b'11110001' & b'01001111';
-- OUTPUT:
65 65
SELECT _binary X'40' | X'01', b'11110001' & _binary b'01001111';
-- OUTPUT:
1 0
在mysql 8.0之前,位操作符 仅支持 bigint,返回结果也是bigint。在mysql 8.0 之后,操作数支持二进制字符串((BINARY, VARBINARY, 和 BLOB ),返回值类型与操作符类型一致。
BIT_AND(), BIT_OR(), 和BIT_XOR() 是聚合函数,用于聚合多行记录的某列的值。
Mysql8.0 与 MySQL5.7不兼容的位运算
因为位运算可以在 MySQL 8.0 中原生处理二进制字符串参数,所以有些表达式在 MySQL 8.0 中产生的结果与在 5.7 中不同。要注意的五种有问题的表达式类型是:
nonliteral_binary { & | ^ } binary
binary { & | ^ } nonliteral_binary
nonliteral_binary { << >> } anything
~ nonliteral_binary
AGGR_BIT_FUNC(nonliteral_binary)
具体差异参考官方文档。
加密与压缩函数
参考:https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html