mysql8 开头a到r的函数学习

目录

数学符号和特殊符号1、&  位和

2、> 大于 

3、 >>将一个(BIGINT)或二进制字符串右移。

4、>=大于等于

 5、<小于

6、<>   等价于!= 不相等

7、<< 将一个(BIGINT)或二进制字符串向左移位。

8、<=小于等于

9、<=>

10、% 和 MOD 都表示模运算符

11、* 乘法运算符 - 减法运算符  +加法运算符  /除法运算符

12、 ->       column->path

13、->>   column->>path

14、:=   赋值

15、=可以看作赋值,也可以看作相等运算符

16、^

17、ABS  返回绝对值

18、 ACOS(X) 返回X的弧余弦,即余弦为X的值,如果X不在-1到1的范围内,或者X为NULL,则返回NULL。

19、ADDDATE()将时间值(间隔)添加到日期值

20、ADDTIME()

21、AES_DECRYPT()    使用AES解密

22、AES_ENCRYPT()    使用AES加密

24、ANY_VALUE

25、ASCII   返回最左边字符的数值

26、ASIN

27、ATAN

28、ATAN2(Y,X),ATAN(Y,X)

29、AVG()      返回参数的平均值

30、BENCHMARK(count,expr) 重复执行一个表达式

31、between  x and  y   在 [x,y]之间

32、BIN () 返回一个包含数字二进制表示形式的字符串 

 33、BIN TO UUID()  将二进制UUID转换为字符串

34、BINARY  将字符串转换为二进制字符串

35、BID AND(expr)

36、BIT COUNT    返回所设置的bite数

37、 BIT LENGTH()  以bite为单位返回参数长度

38、BIT OR (expr)返回expr中所有位的按位或。

39、BIT XOR (expr)返回expr中所有位的按位异或运算。

40、case  :CASE表达式的返回类型是所有结果值的聚合类型

41、 CAST() 将值转换为特定类型

42、CEIL()和  CEILING()   都是返回不小于参数的最小整数值

43、CHAR()将每个参数N解释为一个整数,并返回由这些整数的代码值给出的字符组成的字符串。NULL值会被跳过。

 44、CHAR LENGTH()和CHARACTER LENGTH() 用法相同

45、CHARSET()

46、COALESCE() 返回列表中的第一个非NULL值,如果没有非NULL值,则返回NULL。

47、COERCIBILITY      返回字符串参数的强制排序值。

48、COLLATION(str)返回字符串参数的排序规则

49、compress 以二进制字符串形式返回结果

50、concat 返回拼接后的字符串

51、concat_ws 返回带有分隔符的拼接

52、connection_id()返回连接的连接ID(线程ID)

53、conv(n,from_base,to_base)

54、convert  将值转换为特定字符集类型

56、cos() 返回余弦值

57、cot ()  返回余切值

58、count  返回行数的计数

59、count (distinct expr)    返回多个不同expr的计数

60、crc32  计算一个循环冗余校验值

61、cume_dist 累积分布值

62、curdate 和current   date   都是返回当前日期

63、current  role()返回当前活动角色

64、 curtime  和current  time  都是 返回当前时间

65、current    timestamp   和now 都是返回当前日期加时间

66、current  user 认证的用户名和主机名

67、database   返回默认的(当前的)数据库名称

68、date   提取date或datetime表达式的日期部分

69、date  add  将时间值(间隔)添加到日期值

70、date  format   格式指定日期 

 71、date   sub   从日期中减去时间值(间隔)

72、datediff   两个日期相减

74、dayname  返回日期的星期几的名称

75、dayofweek

76、dayofyear    返回一年中的哪一天(1-366)

77、default  返回表列的默认值,如果列没有默认值,将导致错误。

78、degrees   将弧度转换为度数

79、dense_ rank   当前行在其分区内的排名,无间隙

 80、div    整数的除法

81、elt  返回索引号处的字符串

82、EXP(x)

83、export_set

84、extract   提取日期的一部分

85、ExtractValue()  接受两个字符串参数:一个XML标记片段xml_frag和一个XPath表达式xpath_expr(也称为定位器);它返回第一个文本节点的文本(CDATA),该文本节点是XPath表达式匹配的一个或多个元素的子节点。

86、field  第一个参数在后续参数中的索引(位置)

87、find_ in_set(str,strlist)   第一个参数在第二个参数中的索引(位置)

88、first_value( EXPR ) over( partition by col1 order by col2 )

89、floor 返回不大于参数的最大整数值

90、format  返回格式化为指定的小数位数的数字

91、 format  bytes (count)   将字节计数转换为有单位的值

92、format_pico_time (time_val)

93、found_rows()

94、from_base64(str )    解码base64编码的字符串并返回结果

95、from_days()    将数字转换为日期

96、from_unixtime  将Unix时间戳格式化为日期

97、GeomCollection 和  geometrycollection从几何体中构建几何体集合

98、get_format   返回一个日期格式字符串

 99、get_lock()   获取一个命名的锁

100、greatest   返回最大的参数

101、group_concat  返回拼接后的字符串

102、grouping  区分超级聚合汇总行和普通行

103、gtid_subset(set1,set2)  如果子集中的所有gtid也在set中,则返回true;否则错误。

104、gtid_subtract(set1,set2) 返回set中所有不在subset中的gtid

105、hex() 十进制或字符串值的十六进制表示

106、hour()  

107、ICU_version

108、if(expr1,expr2,expr3) 如果expr1为TRUE 返回expr2。否则,返回expr3。

109、ifnull(expr1,expr2)如果expr1不是NULL, IFNULL()返回expr1;否则返回expr2。

111、inet_aton()返回IP地址的数值

112、inet_ntoa()用数值返回IP地址

113、inet6_aton 返回IPv6地址的数值

114、inet6_ntoa 从数值返回IPv6地址

115、insert(str,pos,len,newstr)  在指定位置插入不超过指定字符数的子串

116、instr()  返回第一个出现的子字符串的索引

117、interval(n,n1,n2,n3,n4.....)    返回小于第一个参数的参数索引

118、is   用布尔值测试一个值

119、lag()

 120、last_day(date)

121、last_insert_id    上一次插入的自动递增列的值

122、last_value( EXPR ) over( partition by col1 order by col2 )

123、lcase()  和  lower()   返回字符串str,根据当前字符集映射将所有字符改为小写,如果str为NULL则返回NULL。默认的字符集是utf8mb4。

124、lead()  分区中当前行的前导行的参数值

125、least   返回最小的参数

126、left   返回指定的最左边的字符数

127、length 返回字符串的长度(以字节为单位)

128、like   简单的模式匹配,类似

129、ln(x)

130、load_file  加载命名文件

131、localtime   localtimestamp  和now  都是返回当前日期和时间

132、locate 返回字符串第一次出现的位置

133、Log 返回第一个参数的自然对数  同   ln

134、lower  :返回小写参数

135、lpad(str,len,padstr) 返回字符串参数,用指定的字符串左填充

136、ltrim(str)   删除字符串str的空格

137、make_set(bits,str1,str2,...)    返回一组逗号分隔的字符串,其中设置了对应的位

138、makedate(year,dayofyear)    从一年中的哪一天创建日期

139、maketime(hour,minute,second)   从小时、分钟、秒创建时间

140、master_pos_wait  阻塞直到副本读取并将所有更新应用到指定位置

141、match  执行全文搜索

142、max  求最大值

144、MD5    计算MD5校验和  用来加密

145、 member  of ()   

146、microsecond  从时间或日期时间表达式 expr 返回微秒,作为 到 范围内的数字

147、mid(str,pos,len)   返回从指定位置开始的子字符串  同substring

148、min  返回最小值

149、minute(time)返回time的分钟数,范围为0到59,如果time为NULL则返回NULL。

150、mod(n,m) 模操作。返回N除以M的余数,如果M或N为空,返回NULL

 151、month(date)

152、monthname(date)     返回date月份的全名

 153、

154、name_const    使列具有给定的名称

155、not   !  

156、not between...and...某个值是否不在某个范围内

157、not   in()   一个值是否不在一组值中

158、not like   否定简单模式匹配  不类似

159、NOT REGEXP  :否定REGEXP

160、now  返回当前日期和时间

161、nth_value(expr,N)

162、ntile(N) over()

 163、nullif(expr1.expr2)

164、oct(N)

165、octet_lengeth  同length()

166、or,||  

167、ord(str)

168、percent_rank() over()

169、period_add(P,N)

170、period_differ (p1,p2)

171、PI()   

172、point(x,y) 使用其坐标构造一个点。

173、polygon(ls [,ls ] ...)

174、position  同   locate

175、pow(x,y)  同power(x,y) 返回X的Y次方的值,如果X或Y为NULL,返回NULL

176、ps_current_thread_id()

177、ps_thread_id(connection_id) 

178、quarter  返回1到4之间的季度,如果date为NULL,则返回NULL。

179、quote

180、padians  返回参数X,从度数转换为弧度。(注意,π弧度等于180度。)如果X为NULL,返回NULL。

181、rand([n]) 随机生成小数

182、random_bytes(len)

183、rank 排名

184、regexp   格式:expr  regexp pat

185、regexp_instr (expr,pat...)

186、RELEASE_ALL_LOCKS() :释放所有当前命名的锁

187、RELEASE_LOCK() :释放命名的锁

189、replace(str,from_str,to_str) 返回字符串str,所有from_str出现的地方都被替换为字符串to_str。REPLACE()在搜索from_str时执行区分大小写的匹配。

 190、reverse 返回字符顺序颠倒后的字符串str,如果str为NULL则返回NULL。

191、right(str,len) 返回字符串str最右边的len字符,如果任何参数为NULL,则返回NULL。

192、rlike  同 regexp

193、roles_graphml() 

194、round(x),round(x,D)

195、row_count()

196、row_number() over()

 197、rpad(str,len,padstr)

198、rtrim(str)  返回删除末尾空格字符的字符串str。


数学符号和特殊符号
1、&  位和

mysql> SELECT 29 & 15;  
 -> 13

2、> 大于 

mysql> SELECT 2 > 2;    
 -> 0              0表示false


3、 >>将一个(BIGINT)或二进制字符串右移。

mysql> SELECT 4 >> 2; 
  -> 1


4、>=大于等于

 mysql> SELECT 2 >= 2; 
-> 1        1表述true


 5、<小于

mysql> SELECT 2 < 2;
        -> 0


6、<>   等价于!= 不相等

mysql> SELECT '.01' <> '0.01';
        -> 1


7、<< 将一个(BIGINT)或二进制字符串向左移位。

mysql> SELECT HEX(_binary X'00FF00FF00FF' << 8);
        -> 'FF00FF00FF00'


8、<=小于等于

mysql> SELECT 0.1 <= 2;
        -> 1


9、<=>

空值相等。该操作符执行类似于=操作符的相等比较,但如果两个操作数都为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0


10、% 和 MOD 都表示模运算符

mysql> SELECT  10%3;
        -> 1


11、* 乘法运算符 - 减法运算符  +加法运算符  /除法运算符

mysql> SELECT 3*5;
        -> 15
mysql> SELECT 3-5;
        -> -2
mysql> SELECT 3+5;
        -> 8
mysql> SELECT 3/5;
        -> 0.60


12、 ->       column->path

当与两个参数一起使用时,->操作符充当JSON_EXTRACT()函数的别名,左边是列标识符,右边是根据JSON文档(列值)计算的JSON路径(字符串字面值)。可以在SQL语句中任何出现列引用的地方使用这样的表达式。

mysql> SELECT c, JSON_EXTRACT(c, "$.id"), g
     > FROM jemp
     > WHERE JSON_EXTRACT(c, "$.id") > 1
     > ORDER BY JSON_EXTRACT(c, "$.name");
+-------------------------------+-----------+------+
| c                             | c->"$.id" | g    |
+-------------------------------+-----------+------+
| {"id": "3", "name": "Barney"} | "3"       |    3 |
| {"id": "4", "name": "Betty"}  | "4"       |    4 |
| {"id": "2", "name": "Wilma"}  | "2"       |    2 |
+-------------------------------+-----------+------+
3 rows in set (0.00 sec)


13、->>   column->>path

这是一个改进的,不引用的提取运算符。->操作符只是提取值,而->>操作符还对提取的结果取消引号。换句话说,给定一个JSON列值列和一个路径表达式路径(字符串字面量),下面三个表达式返回相同的值:

json_unquote(json_extract(column,path))

JSON_UNQUOTE(column -> path)

column->>path

14、:=   赋值

赋值运算符。使运算符左侧的user变量取其右侧的值。右边的值可以是一个文字值、另一个存储值的变量,或者产生标量值的任何合法表达式,包括查询的结果(前提是这个值是标量值)。您可以在同一个SET语句中执行多个赋值。可以在同一个语句中执行多个赋值。

与=不同,:=操作符永远不会被解释为比较操作符。这意味着可以在任何有效的SQL语句(不仅仅是SET语句)中使用:=来为变量赋值。

mysql> SELECT @var1 := 1, @var2;
        -> 1, NULL


15、=可以看作赋值,也可以看作相等运算符

在SET语句中使用时,=等同于:=

where 语句,一般视为相等运算符

16、^

按位异或。 结果类型取决于参数被计算为二进制字符串还是数字:

mysql> SELECT 1 ^ 1;
        -> 0
mysql> SELECT 1 ^ 0;
        -> 1
mysql> SELECT 11 ^ 3;
        -> 8
mysql> SELECT HEX(_binary X'FEDC' ^ X'1111');
        -> 'EFCD'


 A开头的函数


17、ABS  返回绝对值

mysql> SELECT ABS(-32);
        -> 32


18、 ACOS(X) 返回X的弧余弦,即余弦为X的值,如果X不在-1到1的范围内,或者X为NULL,则返回NULL。

mysql> SELECT ACOS(1);
        -> 0
mysql> SELECT ACOS(1.0001);
        -> NULL
mysql> SELECT ACOS(0);
        -> 1.5707963267949


19、ADDDATE()将时间值(间隔)添加到日期值

mysql> SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);
        -> '2008-02-02'
mysql> SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);
        -> '2008-02-02'


20、ADDTIME()

ADDTIME(expr1,expr2)将expr2添加到expr1并返回结果。Expr1是一个时间或日期时间表达式,expr2是一个时间表达式。如果expr1或expr2为NULL则返回NULL。

mysql> SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');
        -> '2008-01-02 01:01:01.000001'
mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
        -> '03:00:01.999997'


21、AES_DECRYPT()    使用AES解密

22、AES_ENCRYPT()    使用AES加密

23、AND   &&  逻辑和

mysql> SELECT 1 AND 1;
        -> 1
mysql> SELECT 1 AND 0;
        -> 0
mysql> SELECT 1 AND NULL;
        -> NULL
mysql> SELECT 0 AND NULL;
        -> 0
mysql> SELECT NULL AND 0;
        -> 0


24、ANY_VALUE

  ANY_VALUE()可以用于在没有GROUP BY子句的情况下引用聚合函数的查询:

当ONLY_FULL_GROUP_BY 被启用时,这个函数对于GROUP BY查询非常有用,当MySQL由于MySQL无法确定的原因拒绝了一个您知道是有效的查询时。函数的返回值和类型与其参数的返回值和类型相同,但不检查ONLY_FULL_GROUP_BY SQL模式的函数结果。

例如,如果name是一个非索引列,则在启用了ONLY_FULL_GROUP_BY时,以下查询将失败:

mysql> SELECT name, address, MAX(age) FROM t GROUP BY name;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP
BY clause and contains nonaggregated column 'mydb.t.address' which
is not functionally dependent on columns in GROUP BY clause; this
is incompatible with sql_mode=only_full_group_by


25、ASCII   返回最左边字符的数值

mysql> SELECT ASCII('2');
        -> 50
mysql> SELECT ASCII(2);
        -> 50
mysql> SELECT ASCII('dx');
        -> 100


26、ASIN

返回X的反正弦值,即正弦值为X的值。如果X不在-1到1的范围内,或者X为NULL,则返回NULL。

27、ATAN

返回X的arctan值,即正切为X的值,如果X为NULL则返回NULL

28、ATAN2(Y,X),ATAN(Y,X)

返回两个变量X和Y的弧切线。它类似于计算Y / X的弧切线,除了两个参数的符号用于确定结果的象限。如果X或Y为NULL则返回NULL。

29、AVG()      返回参数的平均值

mysql> SELECT student_name, AVG(test_score)
       FROM student
       GROUP BY student_name;


 B开头的函数


30、BENCHMARK(count,expr) 重复执行一个表达式

BENCHMARK()函数重复执行表达式expr count次。它可以用来计算MySQL处理表达式的速度。结果值为0,对于不适当的参数,如NULL或负重复计数,则为NULL。

mysql> SELECT BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye'));
+---------------------------------------------------+
| BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye')) |
+---------------------------------------------------+
|                                                 0 |
+---------------------------------------------------+
1 row in set (4.74 sec)


31、between  x and  y   在 [x,y]之间

mysql> SELECT 2 BETWEEN 2 AND '3';
        -> 1


32、BIN () 返回一个包含数字二进制表示形式的字符串 

mysql> SELECT BIN(12);
        -> '1100'


 33、BIN TO UUID()  将二进制UUID转换为字符串

34、BINARY  将字符串转换为二进制字符串

35、BID AND(expr)

返回expr中所有位的按位与。

结果类型取决于函数实参值是作为二进制字符串还是数字进行计算:

36、BIT COUNT    返回所设置的bite数

mysql> SELECT BIT_COUNT(64), BIT_COUNT(BINARY 64);
        -> 1, 7
mysql> SELECT BIT_COUNT('64'), BIT_COUNT(_binary '64');
        -> 1, 7
mysql> SELECT BIT_COUNT(X'40'), BIT_COUNT(_binary X'40');
        -> 1, 1

37、 BIT LENGTH()  以bite为单位返回参数长度

mysql> SELECT BIT_LENGTH('text');
        -> 32

38、BIT OR (expr)返回expr中所有位的按位或。

39、BIT XOR (expr)返回expr中所有位的按位异或运算。

 C开头的函数


40、case  :CASE表达式的返回类型是所有结果值的聚合类型

一般和  case   when ……then ……else…… 一起使用

compare_value THEN result时的CASE值[compare_value THEN result…][ELSE result]结束

CASE WHEN condition THEN result[当条件然后结果…][ELSE result]结束

第一种情况语法返回第一次value=compare_value比较的结果为true时的结果。第二种语法返回第一个条件为true时的结果。如果没有比较或条件为true,则返回ELSE之后的结果;如果没有ELSE部分,则返回NULL。

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


41、 CAST() 将值转换为特定类型

mysql> SELECT CAST("1979aaa" AS YEAR);
+-------------------------+
| CAST("1979aaa" AS YEAR) |
+-------------------------+
|                    1979 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)


42、CEIL()和  CEILING()   都是返回不小于参数的最小整数值

mysql> SELECT CEILING(1.23);
        -> 2


43、CHAR()将每个参数N解释为一个整数,并返回由这些整数的代码值给出的字符组成的字符串。NULL值会被跳过。

 44、CHAR LENGTH()和CHARACTER LENGTH() 用法相同

返回字符串str的长度,以代码点为单位。多字节字符算作一个代码点。这意味着,对于包含两个3字节字符的字符串,LENGTH()返回6,而CHAR_LENGTH()返回2,如下所示:

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


45、CHARSET()

返回字符串参数的字符集,如果参数为NULL,则返回NULL。

mysql> SELECT CHARSET('abc');
        -> 'utf8mb3'mysql> SELECT CHARSET('abc');
        -> 'utf8mb3'


46、COALESCE() 返回列表中的第一个非NULL值,如果没有非NULL值,则返回NULL。

mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL


47、COERCIBILITY      返回字符串参数的强制排序值。

返回值为0-6,值越小优先级越高。

mysql> SELECT COERCIBILITY('abc' COLLATE utf8mb4_swedish_ci);
        -> 0
mysql> SELECT COERCIBILITY(USER());
        -> 3
mysql> SELECT COERCIBILITY('abc');
        -> 4
mysql> SELECT COERCIBILITY(1000);
        -> 5


48、COLLATION(str)返回字符串参数的排序规则

mysql> SELECT COLLATION('abc');
        -> 'utf8mb4_0900_ai_ci'
mysql> SELECT COLLATION(_utf8mb4'abc');
        -> 'utf8mb4_0900_ai_ci'
mysql> SELECT COLLATION(_latin1'abc');
        -> 'latin1_swedish_ci'


49、compress 以二进制字符串形式返回结果

mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
        -> 21
mysql> SELECT LENGTH(COMPRESS(''));
        -> 0
mysql> SELECT LENGTH(COMPRESS('a'));
        -> 13
mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)));
        -> 15


50、concat 返回拼接后的字符串

mysql> SELECT CONCAT('My', 'S', 'QL');
        -> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL');
        -> NULL
mysql> SELECT CONCAT(14.3);
        -> '14.3'


51、concat_ws 返回带有分隔符的拼接

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'


52、connection_id()返回连接的连接ID(线程ID)

mysql> SELECT CONNECTION_ID();
        -> 23786


53、conv(n,from_base,to_base)

在不同的数字基之间转换数字。返回数字N的字符串表示形式,从base from_base转换为base to_base。如果任何参数为NULL则返回NULL。参数N被解释为整数,但可以指定为整数或字符串。最小底数是2,最大值是36。如果from_base为负数,则N被视为有符号数。否则,N被视为无符号。CONV()以64位精度工作。

如果CONV()的任何参数为NULL,则返回NULL。

mysql> SELECT CONV('a',16,2);
        -> '1010'
mysql> SELECT CONV('6E',18,8);
        -> '172'
mysql> SELECT CONV(-17,10,-18);
        -> '-H'
mysql> SELECT CONV(10+'10'+'10'+X'0a',10,10);
        -> '40'


54、convert  将值转换为特定字符集类型

SELECT CONVERT('abc' USING utf8mb4);
55、convert  tz()从一个时区转换到另一个时区

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
        -> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
        -> '2004-01-01 22:00:00'


56、cos() 返回余弦值

mysql> SELECT COS(PI());
        -> -1


57、cot ()  返回余切值

mysql> SELECT COT(12);
        -> -1.5726734063977
mysql> SELECT COT(0);
        -> out-of-range error


58、count  返回行数的计数

返回由SELECT语句检索的行中expr的非null值的数目。结果是一个BIGINT值。

如果没有匹配的行,COUNT()返回0。COUNT(NULL)返回0。

mysql> SELECT student.student_name,COUNT(*)
       FROM student,course
       WHERE student.student_id=course.student_id
       GROUP BY student_name;


59、count (distinct expr)    返回多个不同expr的计数

返回具有不同非null expr值的行数的计数。

如果没有匹配的行,COUNT(DISTINCT)返回0。

mysql> SELECT COUNT(DISTINCT results) FROM student;


60、crc32  计算一个循环冗余校验值

计算循环冗余检查值并返回32位无符号值。如果参数为NULL,则结果为NULL。参数应该是一个字符串,如果不是字符串(如果可能)则被视为字符串。

mysql> SELECT CRC32('MySQL');
        -> 3259397556
mysql> SELECT CRC32('mysql');
        -> 2501908538


61、cume_dist 累积分布值

返回一个值在一组值中的累积分布;也就是说,分区值小于或等于当前行中的值的百分比。这表示在窗口分区的窗口顺序中,在当前行之前或与当前行的对等的行数除以窗口分区中的总行数。返回值范围为0到1。

这个函数应该与ORDER BY一起使用,将分区行按所需的顺序排序。如果没有ORDER BY,所有行都是对等行,值为N/N = 1,其中N为分区大小。

mysql> SELECT
         val,
         ROW_NUMBER()   OVER w AS 'row_number',
         CUME_DIST()    OVER w AS 'cume_dist',
         PERCENT_RANK() OVER w AS 'percent_rank'
       FROM numbers
       WINDOW w AS (ORDER BY val);
+------+------------+--------------------+--------------+
| val  | row_number | cume_dist          | percent_rank |
+------+------------+--------------------+--------------+
|    1 |          1 | 0.2222222222222222 |            0 |
|    1 |          2 | 0.2222222222222222 |            0 |
|    2 |          3 | 0.3333333333333333 |         0.25 |
|    3 |          4 | 0.6666666666666666 |        0.375 |
|    3 |          5 | 0.6666666666666666 |        0.375 |
|    3 |          6 | 0.6666666666666666 |        0.375 |
|    4 |          7 | 0.8888888888888888 |         0.75 |
|    4 |          8 | 0.8888888888888888 |         0.75 |
|    5 |          9 |                  1 |            1 |
+------+------------+--------------------+--------------+

62、curdate 和current   date   都是返回当前日期

mysql> SELECT CURDATE();
        -> '2008-06-13'
mysql> SELECT CURDATE() + 0;
        -> 20080613


63、current  role()返回当前活动角色

返回utf8mb3字符串,包含当前会话的当前活动角色,用逗号分隔,如果没有则为NONE。该值反映了sql_quote_show_create系统变量的设置。

64、 curtime  和current  time  都是 返回当前时间

mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 19:25:37  |
+-----------+


65、current    timestamp   和now 都是返回当前日期加时间

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
        -> 20071215235026.000000


66、current  user 认证的用户名和主机名

mysql> SELECT USER();
        -> 'davida@localhost'
mysql> SELECT * FROM mysql.user;
ERROR 1044: Access denied for user ''@'localhost' to
database 'mysql'
mysql> SELECT CURRENT_USER();
        -> '@localhost'


 D开头的函数


67、database   返回默认的(当前的)数据库名称

mysql> SELECT DATABASE();
        -> 'test'


68、date   提取date或datetime表达式的日期部分

mysql> SELECT DATE('2003-12-31 01:02:03');
        -> '2003-12-31'


69、date  add  将时间值(间隔)添加到日期值

mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
        -> '2018-05-02'
mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
        -> '2017-05-01'
mysql> SELECT DATE_ADD('2020-12-31 23:59:59',
    ->                 INTERVAL 1 SECOND);
        -> '2021-01-01 00:00:00'
mysql> SELECT DATE_ADD('2018-12-31 23:59:59',
    ->                 INTERVAL 1 DAY);
        -> '2019-01-01 23:59:59'
mysql> SELECT DATE_ADD('2100-12-31 23:59:59',
    ->                 INTERVAL '1:1' MINUTE_SECOND);
        -> '2101-01-01 00:01:00'
mysql> SELECT DATE_SUB('2025-01-01 00:00:00',
    ->                 INTERVAL '1 1:1:1' DAY_SECOND);
        -> '2024-12-30 22:58:59'
mysql> SELECT DATE_ADD('1900-01-01 00:00:00',
    ->                 INTERVAL '-1 10' DAY_HOUR);
        -> '1899-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
    ->            INTERVAL '1.999999' SECOND_MICROSECOND);
        -> '1993-01-01 00:00:01.000001'

70、date  format   格式指定日期 

mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
        -> 'Sunday October 2009'
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'
mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00',
    ->                 '%D %y %a %d %m %b %j');
        -> '4th 00 Thu 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
    ->                 '%H %k %I %r %T %S %w');
        -> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
        -> '1998 52'
mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
        -> '00'

 71、date   sub   从日期中减去时间值(间隔)

mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
        -> '2017-05-01'


72、datediff   两个日期相减

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
        -> 1
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
        -> -31
73、dayofmonth    返回月份中的天数(0 ~ 31)

mysql> SELECT DAYOFMONTH('2007-02-03');
        -> 3


74、dayname  返回日期的星期几的名称

mysql> SELECT DAYNAME('2007-02-03');
        -> 'Saturday'


75、dayofweek

返回date对象的工作日索引(1 =周日,2 =周一,…,7 =周六)。这些索引值对应于ODBC标准。如果date为NULL,返回NULL。

mysql> SELECT DAYOFWEEK('2007-02-03');
        -> 7


76、dayofyear    返回一年中的哪一天(1-366)

mysql> SELECT DAYOFYEAR('2007-02-03');
        -> 34


77、default  返回表列的默认值,如果列没有默认值,将导致错误。

78、degrees   将弧度转换为度数

mysql> SELECT DEGREES(PI());
        -> 180
mysql> SELECT DEGREES(PI() / 2);
        -> 90


79、dense_ rank   当前行在其分区内的排名,无间隙

该函数应该与ORDER BY一起使用,以便将分区中的行排序为所需的顺序。没有ORDER BY,所有行都是对等的。

select  distinct t.*
from(
select  s.CID ,s.score,
       dense_rank() over  (partition by CID order by s.score desc) 名次
from sc s ) t;


 80、div    整数的除法

整数的除法。从除法结果中丢弃小数点右边的任何小数部分。

如果任一操作数具有非整数类型,则操作数被转换为DECIMAL并在将结果转换为BIGINT之前使用DECIMAL算术进行除法。如果结果超出BIGINT范围,则发生错误。

mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2;
        -> 2, -2, -2, 2


E开头的函数


81、elt  返回索引号处的字符串

mysql> SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd');
        -> 'Aa'
mysql> SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd');
        -> 'Dd'


82、EXP(x)

返回e(自然对数的底)的x次方的值。这个函数的倒数是LOG()(只使用一个参数)或LN()。

如果X为NULL,该函数返回NULL。

mysql> SELECT EXP(2);
        -> 7.3890560989307
mysql> SELECT EXP(-2);
        -> 0.13533528323661
mysql> SELECT EXP(0);
        -> 1


83、export_set

返回一个字符串,值中每一个比特位被设置,就得到一个on字符串,值中每一个比特位未设置,就得到一个off字符串。位中的位从右到左(从低阶到高阶)检查。字符串从左到右添加到结果中,由分隔符字符串(默认为逗号)分隔。所检查的比特位数由number_of_bits给出,如果没有指定,默认值为64。如果Number_of_bits大于64,则静默地裁剪为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'


84、extract   提取日期的一部分

mysql> SELECT EXTRACT(YEAR FROM '2019-07-02');
        -> 2019
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2019-07-02 01:02:03');
        -> 201907
mysql> SELECT EXTRACT(DAY_MINUTE FROM '2019-07-02 01:02:03');
        -> 20102
mysql> SELECT EXTRACT(MICROSECOND
    ->                FROM '2003-01-02 10:30:00.000123');
        -> 123


85、ExtractValue()  接受两个字符串参数:一个XML标记片段xml_frag和一个XPath表达式xpath_expr(也称为定位器);它返回第一个文本节点的文本(CDATA),该文本节点是XPath表达式匹配的一个或多个元素的子节点。

mysql> SELECT ExtractValue('<a><b/></a>', '/a/b');
+-------------------------------------+
| ExtractValue('<a><b/></a>', '/a/b') |
+-------------------------------------+
|                                     |
+-------------------------------------+
1 row in set (0.00 sec)


F开头的字符串


86、field  第一个参数在后续参数中的索引(位置)

mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
        -> 2
mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
        -> 0


87、find_ in_set(str,strlist)   第一个参数在第二个参数中的索引(位置)

如果字符串str在由N个子字符串组成的字符串列表strlist中,则返回一个范围为1到N的值。字符串列表是由由字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个是类型为SET的列,那么FIND_IN_SET()函数会被优化为使用位运算。如果str不在strlist中,或者strlist是空字符串,则返回0。如果任何一个参数为NULL,则返回NULL。如果第一个参数包含逗号(,),这个函数将无法正常工作。

mysql> SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2


88、first_value( EXPR ) over( partition by col1 order by col2 )

其中EXPR通常是直接是列名,也可以是从其他行返回的表达式,根据字段col1进行分组,在分组内部根据字段col2进行排序,first_value函数返回一组排序值后的第一个值

+------+------+------+-------+
| id   | name | sale | rank1 |
+------+------+------+-------+
|    1 | aaa  |  100 |   100 | <--分组的第一个值为100,开窗结果100
|    1 | bbb  |  200 |   100 | <--分组的第一个值为100,开窗结果100
|    1 | ccc  |  200 |   100 | <--分组的第一个值为100,开窗结果100
|    1 | ddd  |  300 |   100 | <--分组的第一个值为100,开窗结果100
|    2 | eee  |  400 |   400 |
|    2 | fff  |  200 |   400 |
+------+------+------+-------+


89、floor 返回不大于参数的最大整数值

mysql> SELECT FLOOR(1.23), FLOOR(-1.23);
        -> 1, -2


90、format  返回格式化为指定的小数位数的数字

mysql> SELECT FORMAT(12332.123456, 4);
        -> '12,332.1235'
mysql> SELECT FORMAT(12332.1,4);
        -> '12,332.1000'
mysql> SELECT FORMAT(12332.2,0);
        -> '12,332'
mysql> SELECT FORMAT(12332.2,2,'de_DE');
        -> '12.332,20'


91、 format  bytes (count)   将字节计数转换为有单位的值

给定一个数值型字节计数,将其转换为人类可读的格式,并返回一个由值和单位指示符组成的字符串。字符串包含四舍五入到2位小数和最小3位有效数字的字节数。小于1024字节的数字表示为整数,不会四舍五入。如果count为NULL,返回NULL。

mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615);
+-------------------+------------------------------------+
| FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) |
+-------------------+------------------------------------+
|  512 bytes        | 16.00 EiB                          |
+-------------------+------------------------------------+


92、format_pico_time (time_val)

给定以皮秒为单位的数值型性能模式延迟或等待时间,将其转换为人类可读的格式,并返回一个由值和单位指示符组成的字符串。该字符串包含四舍五入到2位的小数时间和最小3位有效数字。小于1纳秒的时间表示为整数,不会四舍五入。

如果time_val为NULL,该函数返回NULL。

mysql> SELECT FORMAT_PICO_TIME(3501), FORMAT_PICO_TIME(188732396662000);
+------------------------+-----------------------------------+
| FORMAT_PICO_TIME(3501) | FORMAT_PICO_TIME(188732396662000) |
+------------------------+-----------------------------------+
| 3.50 ns                | 3.15 min      


93、found_rows()


对于带有LIMIT子句的SELECT,如果没有LIMIT子句,则返回的行数

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();


94、from_base64(str )    解码base64编码的字符串并返回结果

mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));
        -> 'JWJj', 'abc'


95、from_days()    将数字转换为日期

mysql> SELECT FROM_DAYS(730669);
        -> '2000-07-03'


96、from_unixtime  将Unix时间戳格式化为日期

mysql> SELECT FROM_UNIXTIME(1447430881);
        -> '2015-11-13 10:08:01'
mysql> SELECT FROM_UNIXTIME(1447430881) + 0;
        -> 20151113100801
mysql> SELECT FROM_UNIXTIME(1447430881,
    ->                      '%Y %D %M %h:%i:%s %x');
        -> '2015 13th November 10:08:01 2015'


G开头的函数


97、GeomCollection 和  geometrycollection从几何体中构建几何体集合

98、get_format   返回一个日期格式字符串

mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));
        -> '03.10.2003'
mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));
        -> '2003-10-31'


 99、get_lock()   获取一个命名的锁

用GET_LOCK()获得的锁会通过执行RELEASE_LOCK()显式释放,或者在会话终止(正常或异常)时隐式释放。用GET_LOCK()获得的锁不会在事务提交或回滚时释放。

SELECT GET_LOCK('lock1',10);
SELECT GET_LOCK('lock2',10);
SELECT RELEASE_LOCK('lock2');
SELECT RELEASE_LOCK('lock1');


100、greatest   返回最大的参数

mysql> SELECT GREATEST(2,0);
        -> 2
mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);
        -> 767.0
mysql> SELECT GREATEST('B','A','C');
        -> 'C'


101、group_concat  返回拼接后的字符串

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])
 
 
mysql> SELECT student_name,
         GROUP_CONCAT(test_score)
       FROM student
       GROUP BY student_name;
 
mysql> SELECT student_name,
         GROUP_CONCAT(DISTINCT test_score
                      ORDER BY test_score DESC SEPARATOR ' ')
       FROM student
       GROUP BY student_name;

102、grouping  区分超级聚合汇总行和普通行

对于包含WITH ROLLUP修饰符的GROUP BY查询,ROLLUP操作产生超级聚合输出行,其中NULL表示所有值的集合。GROUPING()函数可以让你区分超聚合行的NULL值和常规分组行的NULL值。

mysql> SELECT
         name, size, SUM(quantity) AS quantity,
         GROUPING(name) AS grp_name,
         GROUPING(size) AS grp_size
       FROM t1
       GROUP BY name, size WITH ROLLUP;
+------+-------+----------+----------+----------+
| name | size  | quantity | grp_name | grp_size |
+------+-------+----------+----------+----------+
| ball | NULL  |        5 |        0 |        0 |
| ball | large |       20 |        0 |        0 |
| ball | small |       10 |        0 |        0 |
| ball | NULL  |       35 |        0 |        1 |
| hoop | NULL  |        3 |        0 |        0 |
| hoop | large |        5 |        0 |        0 |
| hoop | small |       15 |        0 |        0 |
| hoop | NULL  |       23 |        0 |        1 |
| NULL | NULL  |       58 |        1 |        1 |
+------+-------+----------+----------+----------+

103、gtid_subset(set1,set2)  如果子集中的所有gtid也在set中,则返回true;否则错误。

给定两组全局事务标识符set1和set2,如果set1中的所有gtid都在set2中,则返回true。如果set1或set2为NULL,则返回NULL。否则返回false。

104、gtid_subtract(set1,set2) 返回set中所有不在subset中的gtid

H开头的函数


105、hex() 十进制或字符串值的十六进制表示

mysql> SELECT X'616263', HEX('abc'), UNHEX(HEX('abc'));
        -> 'abc', 616263, 'abc'
mysql> SELECT HEX(255), CONV(HEX(255),16,10);
        -> 'FF', 255


106、hour()  

返回时间的小时数。对于一天中的时间值,返回值的范围是0到23。然而,时间范围实际上要大得多,因此HOUR的返回值可以大于23。如果time为NULL,则返回NULL。

mysql> SELECT HOUR('10:05:03');
        -> 10
mysql> SELECT HOUR('272:59:59');
        -> 272


I开头的函数


107、ICU_version

用于支持正则表达式操作的国际Unicode组件(International Components for Unicode, ICU)库的版本(参见12.8.2节)。该函数主要用于测试用例。

108、if(expr1,expr2,expr3) 如果expr1为TRUE 返回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'


109、ifnull(expr1,expr2)如果expr1不是NULL, IFNULL()返回expr1;否则返回expr2。

mysql> SELECT IFNULL(1,0);
        -> 1
mysql> SELECT IFNULL(NULL,10);
        -> 10
mysql> SELECT IFNULL(1/0,10);
        -> 10
mysql> SELECT IFNULL(1/0,'yes');
        -> 'yes'
110、in()  一个值是否在一组值中

mysql> SELECT 2 IN (0,3,5,7);
        -> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
        -> 1


111、inet_aton()返回IP地址的数值

给定IPv4网络地址的四元组点阵表示的字符串,返回一个整数,表示该地址的网络字节序(大端序)。如果INET_ATON()不理解其参数,或者expr为NULL,则返回NULL。

mysql> SELECT INET_ATON('10.0.5.9');
        -> 167773449


112、inet_ntoa()用数值返回IP地址

给定网络字节顺序的数字IPv4网络地址,返回该地址作为连接字符集字符串的点四字符串表示形式。如果INET_NTOA()不理解其参数,则返回NULL。

mysql> SELECT INET_NTOA(167773449);
        -> '10.0.5.9'


113、inet6_aton 返回IPv6地址的数值

给定一个IPv6或IPv4的网络地址字符串,返回一个二进制字符串,以网络字节序(大端序)表示该地址的数值。因为数字格式的IPv6地址比最大的整数类型需要更多的字节,所以该函数返回的表示形式是VARBINARY数据类型:IPv6地址为VARBINARY(16), IPv4地址为VARBINARY(4)。如果参数不是有效的地址,或者是NULL, INET6_ATON()返回NULL。

mysql> SELECT HEX(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
        -> 'FDFE0000000000005A55CAFFFEFA9089'
mysql> SELECT HEX(INET6_ATON('10.0.5.9'));
        -> '0A000509'


114、inet6_ntoa 从数值返回IPv6地址

mysql> SELECT INET6_NTOA(UNHEX('FDFE0000000000005A55CAFFFEFA9089'));
        -> 'fdfe::5a55:caff:fefa:9089'
mysql> SELECT INET6_NTOA(UNHEX('0A000509'));
        -> '10.0.5.9'


115、insert(str,pos,len,newstr)  在指定位置插入不超过指定字符数的子串

返回字符串str,起始位置为pos和len的子字符串替换为字符串newstr。如果pos不在字符串的长度内,则返回原始字符串。如果len不在字符串其余部分的长度范围内,则替换从位置pos开始的字符串其余部分。如果任何参数为NULL,则返回NULL。

mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
        -> 'QuWhattic'
mysql> SELECT INSERT('Quadratic', -1, 4, 'What');
        -> 'Quadratic'
mysql> SELECT INSERT('Quadratic', 3, 100, 'What');
        -> 'QuWhat'


116、instr()  返回第一个出现的子字符串的索引

mysql> SELECT INSTR('foobarbar', 'bar');
        -> 4
mysql> SELECT INSTR('xbar', 'foobar');
        -> 0


117、interval(n,n1,n2,n3,n4.....)    返回小于第一个参数的参数索引

如果N < N1,返回0;如果N < N2,返回1;如果N为空,返回-1。所有参数都被视为整数。要求N1 < N2 < N3 <…< Nn,使函数正确工作。这是因为使用了二分查找(非常快)。

mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
        -> 0


118、is   用布尔值测试一个值

is_free_lock  :指定的锁是否空闲

is_ipv4 :参数是否为IPv4地址

is_ipv4_compat  :参数是否为ipv4兼容地址

is_ipv4_mapped :参数是否为ipv4映射地址

is_ipv6:  是否为IPv6地址

is not:  是否

is  not null  :非空检验

is null : 空值检验

is _used_lock:  指定的锁是否正在使用;如果为真,返回连接标识符

is_uuid  :参数是否为有效的UUID

isnull  : 测试实参是否为NULL

J开头的函数
以下都为json函数,就不排序了

一、创建 JSON 值的函数
JSON_ARRAY([val[, val] …])
评估(可能为空)值列表并返回包含这些值的 JSON 数组。

JSON_OBJECT([key, val[, key, val] …])
评估键值对(可能为空)列表并返回包含这些对的 JSON 对象。如果任何键名称是NULL或参数数量是奇数,则会发生错误。

JSON_QUOTE(string)
通过用双引号字符包裹字符串并转义内部引号和其他字符,将utf8mb4字符串引用为 JSON 值,然后将结果作为字符串返回 。NULL如果参数为 ,则 返回 NULL。

二、搜索 JSON 值的函数
JSON_CONTAINS(target, candidate[, path])
判断是否包含某个json值

SELECT * FROM json where JSON_CONTAINS(jsonData,'{"user_name":"tom"}');
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] …)


判断某个路径下是否包json值

MySQL里的json分为json array和json object。 $表示整个json对象,在索引数据时用下标(对于json array,从0开始)或键值(对于json object,含有特殊字符的key要用"括起来,比如$."my name")。
例如:[3, {"a": [5, 6], "b": 10}, [99, 100]],那么:
$[0]:3
$[1]: {"a": [5, 6], "b": 10}
$[2] :[99, 100]
$[3] : NULL
SELECT id,jsonData,JSON_CONTAINS_PATH(jsonData, 'one', '$.user_name') as json FROM json;
 
SELECT JSON_CONTAINS_PATH(jsonData, 'one', '$.bbs') as json FROM json;
json_extract(提取json值)的简洁写法
column->path

Id        jsonData
1       [{"a": [5, 6], "b": 10}]
2       {"age": "23", "sex": "1", "user_name": "tom"}
3       [{"user_name": "bob"}, {"user_name": "jack"}]
SELECT JSON_EXTRACT(jsonData, '$.user_name') json_extract FROM json where id = 2;
在 MySQL 5.7.9 及更高版本中,当与两个参数一起使用时, -> 运算符用作JSON_EXTRACT()函数的别名, 左侧的列标识符和右侧的 JSON 路径(字符串文字)根据 JSON 文档(列值)。

SELECT jsonData -> '$.user_name' json_extract FROM json where id = 2;
 
SELECT jsonData -> '$[0].user_name' json_extract FROM json where id = 3;
json_unquote的简洁写法:
column->>path

去除json字符串的引号,将值转成string类型

SELECT jsonData ->> ‘$.user_name’ json_unquote FROM json;

JSON_KEYS(json_doc[, path])提取json中的键值为json数组

SELECT JSON_KEYS(jsonData) jsonKey FROM json;

SELECT JSON_KEYS(jsonData -> ‘$[0]’) jsonKey2 FROM json;

JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] …])
查询包含指定字符串的paths,并作为一个json array返回。如果有参数为NUL或path不存在,则返回NULL。
one_or_all:"one"表示查询到一个即返回;"all"表示查询所有。
search_str:要查询的字符串。 可以用LIKE里的’%'或‘_’匹配。
path:在指定path下查。

SET @j = '["abc", [{"k": "10"}, "def"], {"x":"abc"}, {"y":"bcd"}]';
 
SELECT JSON_SEARCH(@j, 'all', '10') jsonSearch;
 
SELECT JSON_SEARCH(jsonData, 'one', '23') as jsonSearch FROM json;
三、修改 JSON 值的函数
JSON_APPEND(json_doc, path, val[, path, val] …)将值附加到 JSON 文档中指定数组的末尾并返回结果
json_append 废弃,MySQL 5.7.9开始改名为json_array_append

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] …)
末尾添加数组元素,如果原有值是数值或json对象,则转成数组后,再添加元素

SELECT JSON_ARRAY_APPEND(jsonData, '$[0]', '1') as newJson  FROM json  where id = 1;
 
SELECT JSON_ARRAY_APPEND(jsonData, '$[1]', '1') as newJson  FROM json  where id = 1;
JSON_ARRAY_INSERT(json_doc, path, val[, path, val] …)
在指定索引插入字符并返回对应的字符

SELECT JSON_ARRAY_INSERT(jsonData, ‘$[0]’, ‘2’) jsonArray FROM json where id = 1;

JSON_INSERT(json_doc, path, val[, path, val] …)
插入值(插入新值,但不替换已经存在的旧值)

SELECT JSON_INSERT(jsonData,'$[1].a','996','$[10]','mysql-json') jsonInsert FROM json where id = 1;
JSON_MERGE(json_doc, json_doc[, json_doc] …)
合并json数组或对象

SELECT JSON_MERGE('[1, 2]', '[true, false]');
JSON_MERGE(json_doc, json_doc[, json_doc] …)
合并json数组或对象

SELECT JSON_MERGE('[1, 2]', '[true, false]');
JSON_REMOVE(json_doc, path[, path] …)
从 JSON 文档中删除数据并返回结果

SELECT JSON_REMOVE(jsonData,'$[0]') as jsonRemove FROM json where id = 1;
JSON_REPLACE(json_doc, path, val[, path, val] …)
替换 JSON 文档中的现有值并返回结果

SELECT JSON_REPLACE(jsonData, '$[1].a', '{1,2,3}') FROM json where id =1;
JSON_SET(json_doc, path, val[, path, val] …)
在 JSON 文档中插入或更新数据并返回结果

SELECT JSON_SET(jsonData,'$.sex','男','$[100]','json') jsonSet FROM json where id = 2;
JSON_SET(), JSON_INSERT()和 JSON_REPLACE()功能的关系:
JSON_SET() 替换现有值并添加不存在的值。
JSON_INSERT() 插入值而不替换现有值。
JSON_REPLACE()仅替换 现有值。
四、返回 JSON 值属性的函数
JSON_DEPTH(json_doc) 返回json文档的最大深度

SELECT JSON_DEPTH(jsonData) from json;
JSON_LENGTH(json_doc[, path]) 返回json文档的长度

SELECT JSON_LENGTH(jsondata,'$[1].b') json_length FROM json where id = 1;
JSON_TYPE(json_val)
返回JSON 值类型的字符串。这可以是对象、数组或标量类型

SELECT jsonData,JSON_TYPE(jsonData) FROM json;
 
SELECT JSON_TYPE(jsonData -> '$.age') FROM json where id = 2;
json_valid 判断是否为合法json文档

L开头的函数


119、lag()

lag(EXPR,<OFFSET>,<DEFAULT>) over(partition by col1 order by col2)

 EXPR通常是直接是列名,也可以是从其他行返回的表达式;
OFFSET是默认为1,表示在当前分区内基于当前行的偏移行数;
DEFAULT是在OFFSET指定的偏移行数超出了分组的范围时(因为默认会返回null),可以通过设置这个字段来返回一个默认值来替代null。

 120、last_day(date)

接受一个date或datetime值,并返回当月最后一天的对应值。如果参数无效,则返回NULL。

mysql> SELECT LAST_DAY('2003-02-05');
        -> '2003-02-28'
mysql> SELECT LAST_DAY('2004-02-05');
        -> '2004-02-29'
mysql> SELECT LAST_DAY('2004-01-01 01:01:01');
        -> '2004-01-31'
mysql> SELECT LAST_DAY('2003-03-32');
        -> NULL


121、last_insert_id    上一次插入的自动递增列的值

122、last_value( EXPR ) over( partition by col1 order by col2 )

其中EXPR通常是直接是列名,也可以是从其他行返回的表达式,根据字段col1进行分组,在分组内部根据字段col2进行排序,first_value函数返回一组排序值后的第一个值,last_value返回一组排序值后的最后一个值

重点注意:因为在开窗函数over()中除了分组和排序,还有一个窗口的从句,在经过排序之后,使用last_value函数生效的范围是第一行至当前行,在上面的例子id=1分组中,每一行显示的所谓最后一个值last value来自第一行到当前行这个范围内的最后一个,这里,我们仅对id=1组逐行分析,id=2分组同理可证

123、lcase()  和  lower()   返回字符串str,根据当前字符集映射将所有字符改为小写,如果str为NULL则返回NULL。默认的字符集是utf8mb4。

mysql> SELECT LOWER('QUADRATICALLY');
        -> 'quadratically'


124、lead()  分区中当前行的前导行的参数值

lead(expr [ , N [,default] ] )

返回分区中当前行前面(后面)N行的expr值。如果没有这样的行,则返回值为default。例如,如果N是3,则最后三行的返回值为默认值。如果缺少N或default,则默认值分别为1和NULL。

N必须是一个非负整数字面量。如果N为0,则对当前行的expr进行计算。

125、least   返回最小的参数

mysql> SELECT LEAST(2,0);
        -> 0
mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
        -> 3.0
mysql> SELECT LEAST('B','A','C');
        -> 'A'


126、left   返回指定的最左边的字符数

127、length 返回字符串的长度(以字节为单位)

mysql> SELECT LENGTH('text');
        -> 4


128、like   简单的模式匹配,类似

mysql> SELECT 'David!' LIKE 'David_';
        -> 1
mysql> SELECT 'David!' LIKE '%D%v%';
        -> 1


129、ln(x)

返回 X 的自然对数;也就是说, X 的底 e 对数。如果 X 小于或等于 0.0E0, 该函数返回并报告警告“对数参数无效”。

mysql> SELECT LN(2);
        -> 0.69314718055995
mysql> SELECT LN(-2);
        -> NULL


130、load_file  加载命名文件

mysql> UPDATE t
            SET blob_col=LOAD_FILE('/tmp/picture')
            WHERE id=1;


131、localtime   localtimestamp  和now  都是返回当前日期和时间

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26'


132、locate 返回字符串第一次出现的位置

mysql> SELECT LOCATE('bar', 'foobarbar');
        -> 4
mysql> SELECT LOCATE('xbar', 'foobar');
        -> 0
mysql> SELECT LOCATE('bar', 'foobarbar', 5);
        -> 7


133、Log 返回第一个参数的自然对数  同   ln

log2(x)  :返回 的以 2 为底的对数。如果 X 小于或等于 0.0E0, 该函数返回并报告警告“对数参数无效”

log10(x):返回 的以 10为底的对数。如果 X 小于或等于 0.0E0, 该函数返回并报告警告“对数参数无效”

134、lower  :返回小写参数

mysql> SELECT LOWER('QUADRATICALLY');
        -> 'quadratically'


135、lpad(str,len,padstr) 返回字符串参数,用指定的字符串左填充

返回字符串 str,左填充 用绳子垫到一定长度 的 len 字符。如果 str 比 len 长,则返回值缩短 到len字符。

mysql> SELECT LPAD('hi',4,'??');
        -> '??hi'
mysql> SELECT LPAD('hi',1,'??');
        -> 'h'


136、ltrim(str)   删除字符串str的空格

mysql> SELECT LTRIM('  barbar');
        -> 'barbar'


137、make_set(bits,str1,str2,...)    返回一组逗号分隔的字符串,其中设置了对应的位

返回一个设置值(包含分隔的子字符串的字符串 按字符)组成的字符串 设置了相应的位。str1 对应于位 0,str2 对应于位 1,依此类推。 str1、str2 中的值为 未追加到结果中。,NULL...

mysql> SELECT MAKE_SET(1,'a','b','c');
        -> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
        -> 'hello,world'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world');
        -> 'hello'
mysql> SELECT MAKE_SET(0,'a','b','c');
        -> ''


138、makedate(year,dayofyear)    从一年中的哪一天创建日期

返回给定年份和日期值的日期。年份中的天数必须大于 0 

mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
        -> '2011-01-31', '2011-02-01'
mysql> SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);
        -> '2011-12-31', '2014-12-31'
mysql> SELECT MAKEDATE(2011,0);
        -> NULL


139、maketime(hour,minute,second)   从小时、分钟、秒创建时间

mysql> SELECT MAKETIME(12,15,30);
        -> '12:15:30'


140、master_pos_wait  阻塞直到副本读取并将所有更新应用到指定位置

141、match  执行全文搜索

SELECT MATCH (a) AGAINST ('abc') FROM t GROUP BY a WITH ROLLUP;


142、max  求最大值

mysql> SELECT student_name, MIN(test_score), MAX(test_score)
       FROM student
       GROUP BY student_name;


143、

MBRContains() :一个几何的MBR是否包含另一个的MBR

MBRCoveredBy() :一个MBR是否被另一个覆盖

MBRCovers() :一个MBR是否覆盖另一个

MBRDisjoint() :两个几何的MBR是否是不相交的

MBREqual() (弃用5.7.6) :两个几何的MBR是否相等

MBREquals():两个几何的MBR是否相等

MBRIntersects() :两个几何的MBR是否相交

MBROverlaps() :两个几何的MBR是否重叠

MBRTouches()  :是否触摸两个几何的MBR

MBRWithin()  :一个几何的MBR是否在另一个几何的MBR之内


144、MD5    计算MD5校验和  用来加密

mysql> SELECT MD5('testing');
        -> 'ae2b1fca515949e5d54fb22b8ed95575'


145、 member  of ()   

value   member  of (json array)   

如果value是json_array的元素,返回true(1),否则返回false(0)。value必须是标量或JSON文档;如果是标量,运算符会尝试将其视为JSON数组的元素。如果value或json_array为NULL,函数返回NULL。

mysql> SELECT 17 MEMBER OF('[23, "abc", 17, "ab", 10]');
+-------------------------------------------+
| 17 MEMBER OF('[23, "abc", 17, "ab", 10]') |
+-------------------------------------------+
|                                         1 |
+-------------------------------------------+
1 row in set (0.00 sec)


146、microsecond  从时间或日期时间表达式 expr 返回微秒,作为 到 范围内的数字

mysql> SELECT MICROSECOND('12:00:00.123456');
        -> 123456
mysql> SELECT MICROSECOND('2019-12-31 23:59:59.000010');
        -> 10


147、mid(str,pos,len)   返回从指定位置开始的子字符串  同substring

没有len参数的表单从字符串str返回一个从位置pos开始的子字符串。有len参数的表单从位置pos开始返回一个长度为len的子字符串。使用from的表单是标准的SQL语法。也可以使用负数表示pos。在这个例子中,子字符串的起始位置是字符串末尾的pos字符,而不是字符串的起始位置。在该函数的任何形式中,负数都可以用于pos。pos的值为0将返回一个空字符串。

mysql> SELECT SUBSTRING('Quadratically',5);
        -> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
        -> 'barbar'
mysql> SELECT SUBSTRING('Quadratically',5,6);
        -> 'ratica'
mysql> SELECT SUBSTRING('Sakila', -3);
        -> 'ila'
mysql> SELECT SUBSTRING('Sakila', -5, 3);
        -> 'aki'
mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
        -> 'ki'


148、min  返回最小值

mysql> SELECT student_name, MIN(test_score), MAX(test_score)
       FROM student
       GROUP BY student_name;


149、minute(time)返回time的分钟数,范围为0到59,如果time为NULL则返回NULL。

mysql> SELECT MINUTE('2008-02-03 10:05:03');
        -> 5


150、mod(n,m) 模操作。返回N除以M的余数,如果M或N为空,返回NULL

mysql> SELECT MOD(234, 10);
        -> 4
mysql> SELECT 253 % 7;
        -> 1
mysql> SELECT MOD(29,9);
        -> 2
mysql> SELECT 29 MOD 9;
        -> 2


 151、month(date)

返回日期的月份,范围是1到12,表示一月到十二月;返回0,表示诸如'0000-00-00'或'2008-00-00'这样的日期,月份部分为0。如果date为NULL,返回NULL。

mysql> SELECT MONTH('2008-02-03');
        -> 2


152、monthname(date)     返回date月份的全名

mysql> SELECT MONTHNAME('2008-02-03');
        -> 'February'


 153、

MultiLineString() :从LineString值引发MultiLineString

MultiPoint() :从点值构造多点

MultiPolygon() :从多边形值构造MultiPolygon

N开头的函数


154、name_const    使列具有给定的名称

返回给定的值。在用于生成结果集列时,NAME_CONST()会使列具有给定的名称。参数应该是常量。

mysql> SELECT NAME_CONST('myname', 14);
+--------+
| myname |
+--------+
|     14 |
+--------+


155、not   !  

逻辑。如果操作数为0,计算结果为1;如果操作数非零,计算结果为0;NOT NULL返回NULL。

mysql> SELECT NOT 10;
        -> 0
mysql> SELECT NOT 0;
        -> 1
mysql> SELECT NOT NULL;
        -> NULL
mysql> SELECT ! (1+1);
        -> 0
mysql> SELECT ! 1+1;
        -> 1


156、not between...and...某个值是否不在某个范围内

157、not   in()   一个值是否不在一组值中

158、not like   否定简单模式匹配  不类似

159、NOT REGEXP  :否定REGEXP

160、now  返回当前日期和时间

161、nth_value(expr,N)

返回窗口框架第n行expr的值。如果没有这样的行,则返回值为NULL。

N必须是一个正整数。

162、ntile(N) over()

将一个分区划分为N组(桶),为分区中的每一行指定桶号,并返回当前行在该分区中的桶号。例如,如果N为4,NTILE()将行分成4个桶。如果N是100,NTILE()将行分成100个桶。

N必须是一个正整数。桶编号返回值的范围是1 ~ N。

 163、nullif(expr1.expr2)

如果expr1 = expr2为true,返回NULL,否则返回expr1。这与expr1 = expr2然后为NULL否则expr1结束的情况相同。

返回值的类型与第一个参数相同。
 

mysql> SELECT NULLIF(1,1);
        -> NULL
mysql> SELECT NULLIF(1,2);
        -> 1


O开头的函数


164、oct(N)

返回N的八进制值的字符串表示形式,其中N是longlong (BIGINT)数。它等价于CONV(N,10,8)如果N为NULL,返回NULL。

mysql> SELECT OCT(12);
        -> '14'


165、octet_lengeth  同length()

166、or,||  

逻辑或。□在两个操作数都非null的情况下,如果有操作数非零,则结果为1,否则为0;□对于NULL操作数,如果另一个操作数非零,则结果为1,否则为NULL;□如果两个操作数都是NULL,结果是NULL;

mysql> SELECT 1 OR 1;
        -> 1
mysql> SELECT 1 OR 0;
        -> 1
mysql> SELECT 0 OR 0;
        -> 0
mysql> SELECT 0 OR NULL;
        -> NULL
mysql> SELECT 1 OR NULL;
        -> 1


167、ord(str)

ORD()返回与ASCII()函数相同的值。如果str为NULL,该函数返回NULL。

mysql> SELECT ORD('2');
        -> 50


P开头的函数


168、percent_rank() over()

返回分区值小于当前行的值的百分比(不包括最高值)。返回值范围从0到1,表示行相对排名,通过这个公式计算得出,其中rank是行排名,rows是分区行数:

169、period_add(P,N)

在周期P上增加N个月(格式为YYMM或YYYYMM)。返回格式为YYYYMM的值。

mysql> SELECT PERIOD_ADD(200801,2);
        -> 200803


170、period_differ (p1,p2)

返回时期P1和P2之间的月数。P1和P2的格式应该是YYMM或YYYYMM。注意,句点参数P1和P2不是日期值。

mysql> SELECT PERIOD_DIFF(200802,200703);
        -> 11


171、PI()   

mysql> SELECT PI();
        -> 3.141593


172、point(x,y) 使用其坐标构造一个点。

173、polygon(ls [,ls ] ...)

根据一些LineString或WKB LineString参数构造多边形值。如果任何参数不表示LinearRing(即不是闭合的简单LineString),则返回值为NULL。

174、position  同   locate

175、pow(x,y)  同power(x,y) 返回X的Y次方的值,如果X或Y为NULL,返回NULL

mysql> SELECT POW(2,2);
        -> 4
mysql> SELECT POW(2,-2);
        -> 0.25


176、ps_current_thread_id()

返回一个BIGINT无符号值,表示分配给当前连接的性能架构线程ID。

线程ID返回值是性能模式表的THREAD_ID列中给定类型的值。

性能模式配置对PS_CURRENT_THREAD_ID()的影响与对PS_THREAD_ID()的影响相同

177、ps_thread_id(connection_id) 

给定一个连接ID,返回一个BIGINT无符号值,表示分配给连接ID的性能模式线程ID,如果连接ID不存在线程ID,则返回NULL。后一种情况可能发生在没有检测的线程中,或者connection_id为NULL时。

Q开头的函数


178、quarter  返回1到4之间的季度,如果date为NULL,则返回NULL。

mysql> SELECT QUARTER('2008-04-01');
        -> 2


179、quote

将字符串加引号,生成的结果可以在SQL语句中作为正确转义的数据值使用。返回的字符串由单引号括起来,每一个反斜杠(\)、单引号(')、ASCII NUL和Control+Z的实例前面都有一个反斜杠。如果参数是NULL,返回值是单词“NULL”,不包含单引号。

mysql> SELECT QUOTE('Don\'t!');
        -> 'Don\'t!'
mysql> SELECT QUOTE(NULL);
        -> NULL


180、padians  返回参数X,从度数转换为弧度。(注意,π弧度等于180度。)如果X为NULL,返回NULL。

mysql> SELECT RADIANS(90);
        -> 1.5707963267949


R开头的函数


181、rand([n]) 随机生成小数

返回一个范围为0 <= v < 1.0的随机浮点值v。要获得一个i <= R < j范围内的随机整数R,可以使用表达式FLOOR(i + RAND() * (j−i))。例如,要获得一个范围为7 <= R < 12的随机整数,使用下面的语句:

mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.01 sec)


182、random_bytes(len)

该函数返回一个使用SSL库的随机数生成器生成的len随机字节的二进制字符串。允许的len值范围是1 ~ 1024。对于超出此范围的值,则会发生错误。如果len为NULL,返回NULL。

183、rank 排名

mysql> SELECT
         val,
         ROW_NUMBER() OVER w AS 'row_number',
         RANK()       OVER w AS 'rank',
         DENSE_RANK() OVER w AS 'dense_rank'
       FROM numbers
       WINDOW w AS (ORDER BY val);
+------+------------+------+------------+
| val  | row_number | rank | dense_rank |
+------+------------+------+------------+
|    1 |          1 |    1 |          1 |
|    1 |          2 |    1 |          1 |
|    2 |          3 |    3 |          2 |
|    3 |          4 |    4 |          3 |
|    3 |          5 |    4 |          3 |
|    3 |          6 |    4 |          3 |
|    4 |          7 |    7 |          4 |
|    4 |          8 |    7 |          4 |
|    5 |          9 |    9 |          5 |
+------+------------+------+------------+

184、regexp   格式:expr  regexp pat

如果字符串expr匹配模式pat指定的正则表达式,则返回1,否则返回0。如果expr或pat为NULL,则返回值为NULL。
 

mysql> SELECT 'Michael!' REGEXP '.*';
+------------------------+
| 'Michael!' REGEXP '.*' |
+------------------------+
|                      1 |
+------------------------+
mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
+---------------------------------------+
| 'new*\n*line' REGEXP 'new\\*.\\*line' |
+---------------------------------------+
|                                     0 |
+---------------------------------------+
mysql> SELECT 'a' REGEXP '^[a-d]';
+---------------------+
| 'a' REGEXP '^[a-d]' |
+---------------------+
|                   1 |
+---------------------+

185、regexp_instr (expr,pat...)

返回与模式pat指定的正则表达式匹配的字符串expr的子字符串的起始索引,如果没有匹配,则为0。如果expr或pat为NULL,则返回值为NULL。字符索引从1开始。

mysql> SELECT REGEXP_INSTR('dog cat dog', 'dog');
+------------------------------------+
| REGEXP_INSTR('dog cat dog', 'dog') |
+------------------------------------+
|                                  1 |
+------------------------------------+
mysql> SELECT REGEXP_INSTR('dog cat dog', 'dog', 2);
+---------------------------------------+
| REGEXP_INSTR('dog cat dog', 'dog', 2) |
+---------------------------------------+
|                                     9 |
+---------------------------------------+
mysql> SELECT REGEXP_INSTR('aa aaa aaaa', 'a{2}');
+-------------------------------------+
| REGEXP_INSTR('aa aaa aaaa', 'a{2}') |
+-------------------------------------+
|                                   1 |
+-------------------------------------+
mysql> SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');
+-------------------------------------+
| REGEXP_INSTR('aa aaa aaaa', 'a{4}') |
+-------------------------------------+
|                                   8 |
+-------------------------------------+

186、RELEASE_ALL_LOCKS() :释放所有当前命名的锁

187、RELEASE_LOCK() :释放命名的锁

188、repeat(str,count) 返回一个字符串,包含字符串str repeat count次。如果count小于1,返回空字符串。如果str或count为NULL,则返回NULL。

mysql> SELECT REPEAT('MySQL', 3);
        -> 'MySQLMySQLMySQL'


189、replace(str,from_str,to_str) 返回字符串str,所有from_str出现的地方都被替换为字符串to_str。REPLACE()在搜索from_str时执行区分大小写的匹配。

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'


 190、reverse 返回字符顺序颠倒后的字符串str,如果str为NULL则返回NULL。

mysql> SELECT REVERSE('abc');
        -> 'cba'


191、right(str,len) 返回字符串str最右边的len字符,如果任何参数为NULL,则返回NULL。

mysql> SELECT RIGHT('foobarbar', 4);
        -> 'rbar'


192、rlike  同 regexp

193、roles_graphml() 

返回utf8mb3字符串,其中包含表示内存角色子图的GraphML文档。要查看<graphml>元素中的内容,需要ROLE_ADMIN权限(或已弃用的超级权限)。否则,结果只会显示一个空元素:

mysql> SELECT ROLES_GRAPHML();
+---------------------------------------------------+
| ROLES_GRAPHML()                                   |
+---------------------------------------------------+
| <?xml version="1.0" encoding="UTF-8"?><graphml /> |
+------------


194、round(x),round(x,D)

将参数X舍入到D位小数。取整算法取决于x的数据类型。如果没有指定,D默认为0。D可以是负数,这使得X的小数点左边的D位变为0。D的绝对值最大值为30;超过30(或-30)的任何数字都被截断。如果X或D为NULL,函数返回NULL。

mysql> SELECT ROUND(-1.23);
        -> -1
mysql> SELECT ROUND(-1.58);
        -> -2
mysql> SELECT ROUND(1.58);
        -> 2
mysql> SELECT ROUND(1.298, 1);
        -> 1.3
mysql> SELECT ROUND(1.298, 0);
        -> 1
mysql> SELECT ROUND(23.298, -1);
        -> 20
mysql> SELECT ROUND(.12345678901234567890123456789012345, 35);
        -> 0.123456789012345678901234567890


195、row_count()

ROW_COUNT()返回一个值:

DDL语句:0。这适用于CREATE TABLE或DROP TABLE之类的语句。

除SELECT之外的DML语句:受影响的行数。这适用于UPDATE、INSERT或DELETE之类的语句(和以前一样),现在也适用于ALTER TABLE和LOAD DATA之类的语句。

如果语句返回结果集,则选择:-1;如果不返回,则选择“受影响”的行数。例如,对于SELECT * FROM t1, ROW_COUNT()返回-1。对于SELECT * FROM t1 INTO OUTFILE 'file_name', ROW_COUNT()返回写入文件的行数。

信号语句:0。

对于UPDATE语句,默认情况下的affected-rows值是实际改变的行数。如果你在连接mysqld时给mysql_real_connect()指定了CLIENT_FOUND_ROWS标志,affected-rows值就是“found”的行数;也就是说,由WHERE子句匹配。

对于REPLACE语句,如果新行替换了旧行,则affected-rows值为2,因为在这种情况下,在删除重复的行之后插入了一行。

For INSERT…在重复的键更新语句中,如果该行作为新行插入,则每行的affected-rows值为1,如果已存在的行被更新,则为2,如果已存在的行被设置为当前值,则为0。如果指定了CLIENT_FOUND_ROWS标志,如果现有行设置为其当前值,则affected-rows值为1(不是0)。

ROW_COUNT()的值类似于mysql_affected_rows()的C API函数的值,以及mysql客户端在语句执行后显示的行计数。

mysql> INSERT INTO t VALUES(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
|           3 |
+-------------+
1 row in set (0.00 sec)
 
mysql> DELETE FROM t WHERE i IN(1,2);
Query OK, 2 rows affected (0.00 sec)
 
mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

196、row_number() over()

返回其分区内的当前行编号。行号范围从1到分区行数。

ORDER BY影响行编号的顺序。如果没有ORDER BY,行编号是不确定的。

ROW_NUMBER()为节点分配不同的行号。要给节点分配相同的值,可以使用RANK()或DENSE_RANK()。

 197、rpad(str,len,padstr)

返回字符串str,用字符串padstr右填充到长度为len的字符串。如果str比len长,返回值会缩短为len字符。如果str、padstr或len为NULL,则函数返回NULL。

mysql> SELECT RPAD('hi',5,'?');
        -> 'hi???'
mysql> SELECT RPAD('hi',1,'?');
        -> 'h'


198、rtrim(str)  返回删除末尾空格字符的字符串str。

mysql> SELECT RTRIM('barbar   ');
        -> 'barbar'
​
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值