We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
abs()
正常情况下,绝对值的结果
select abs(2); // 2 select abs(-2); // 2 select abs(0); // 0 select abs(-0); // 0
有些极端情况下,输入的值不一定是数字,我们看一下它的结果:
select abs('11'); // 11 select abs('123dd'); // 123 select abs('dd123'); // 0 select abs('mysql'); // 0 select abs(null); // null select abs(1/0); // null select abs('2022-01-22'); // 2022 select abs(true); // 1 select abs(false); // 0 select abs(CURRENT_TIMESTAMP()); // 20220128155334
总结:
字符串类型的数字
数字开头加非数字字符串
非数字开头
0
null
1/0
true
1
false
字符串是通过特殊符号连接
mod()
正常情况下,取余数的结果
select mod(4, 3); // 1 select mod(4, 2); // 0 select mod(3, 4); // 3
在极端情况下的结果
select mod(4, 0); // null select mod(4, 'e'); // null select mod(4, '3'); // 1 select mod(4, '123d'); // 1 select mod(4, true); // 0 select mod(4, 1/0); // null select mod(4, null); //null
总结:它的转换逻辑
round()
正常情况下,四舍五入的结果
select round(3.24, 1); // 3.2
非正常情况下的结果
select round(3.23, null); // null select round(3.23, 1/0); // null
总结:算术类的函数,如果输入的值不是数字,会先将它转换成数字,然后在进行后面的操作。
concat()
正常情况下使用 concat() 的结果
select concat('abc', 123); // 'abc123'
在极端情况下使用结果
select concat('abc', true); // 'abc1' select concat('abc', false); // 'abc0' select concat('abc', null); // null select concat('abc', 1/0); // null select concat('abc', CURRENT_TIMESTAMP()); // abc2022-01-29 14:52:01
这个函数比较简单,没有太多极端的情况,和 null 连接,结果就是 null
length()
一个汉字算三个字符,一个数字或者字母算一个字符
select length('abc'); // 3 select length(23); // 2 select legnth(1.2); // 3 select length("你好"); // 6
极端情况的结果
select length(true); // 1,true 是 1 所以结果是 1 select length(null); // null
char_length()
字母,数字,汉字都算一个字符
select char_length('abc'); // 3 select char_length('你好'); // 2 select char_length(123); // 3 select char_length(true); // 1 select char_legnth(null); // null
lower()
upper()
select lower('FF'); // 'ff' select lower(1); // 1 select lower(true); // 1 select lower(null); // null select lower(1/0); // null select lower('你好'); // '你好'
upper() 和 lower() 用法一样,如果是不是字母,输出原值
replace()
select replace('abc', 'c', 'd'); // 'abd' select replace('abc', 'd', 'D'); // 'abc' select replace('abc', 'c', true); // 'ab1' select replace('abc', 'c', null); // null select replace(true, 1, 'abc'); // 'abc' select replace(true, true, 'abc'); // 'abc' select replace(true, 'a', 34); // 1
substring(string, start, length)
start 表示开始截取的位置,length 数字表示截取的长度,
start
length
select substring('abcd', 1, 3); // 'abc' select substring('abcd', 0, 3); // 空 select substring('abcd', 3, 1); // 'c' select substring('abcd', 3, -1); // 空 select substring('abcd', 1, 1); // 'a' select substring('abcd', 2, 2); // 'bc' select substring('abcd', -1, 1); // 'd' select substring('abcd', 1, null); // null select substring('abcd', 1, 'd'); // 空
current_time() 获取当前系统的时间
current_time()
current_date() 获取当前系统的日期
current_date()
current_timestamp() 获取当前系统的时间 + 日期
current_timestamp()
extract() 获取具体的年月日
extract()
date() 获取时间的日期部分
date()
year() 获取时间的年份部分
year()
month() 获取时间的月份部分
month()
day() 获取时间的天数部分
day()
hour() 获取时间的小时部分
hour()
minute() 获取时间的分钟部分
minute()
second() 获取时间的秒部分
second()
select current_time(); // 12:01:34 select current_date(); // 2022-01-30 select current_timestamp(); // 2022-01-30 12:01:34 select extract(year from '2022-01-30 12:01:34'); // 2022 select date('2022-01-30 12:01:34'); // 2021-01-30 select year('2022-01-30 12:01:34'); // 2022 select month('2022-01-30 12:01:34'); // 01 select day('2022-01-30 12:01:34'); // 30 select hour('2022-01-30 12:01:34'); // 12 select minute('2022-01-30 12:01:34'); // 01 select second('2022-01-30 12:01:34'); // 34
cast()
参数是个表达式,通过 as 分割 2 个参数,一个是原始数据,一个是目标类型
as
select cast(12.3 as signed); // 12 select cast(12.3 as char); // 12.1
将字符串数字转成 int 类型会报错,转成 float 类型就不会报错
int
float
select cast('12' as int); // 报错 select cast('12' as float); // 12
还可以使用 decimal() 指定精度,接收两个参数,第一个参数是精度位(包括小数部分),第二个参数是小数位数
decimal()
下面的 SQL 语句中,为什么两个输出值是一样的?
因为小数位是两个,小数位加整数位不够八位,所以,最后呈现出来的是 6 。
6
select cast('1234.56789' as decimal(8, 2)); // 1234.57 select cast('1234.56789' as decimal(6, 2)); // 1234.57
coalesce()
select coalesce(null, null, 2); // 2 select coalesce(null, 1); // 1
The text was updated successfully, but these errors were encountered:
No branches or pull requests
算术函数
abs()
绝对值正常情况下,绝对值的结果
有些极端情况下,输入的值不一定是数字,我们看一下它的结果:
总结:
字符串类型的数字
,先将它转换成数字再做绝对值数字开头加非数字字符串
,取前面数字部分做绝对值非数字开头
,结果是0
null
,结果是null
1/0
,结果是null
true
,结果是1
false
,结果是0
字符串是通过特殊符号连接
,则去第一个特殊符号前的值,做转换mod()
取余数正常情况下,取余数的结果
在极端情况下的结果
总结:它的转换逻辑
0
或者null
则结果null
round()
四舍五入正常情况下,四舍五入的结果
非正常情况下的结果
总结:算术类的函数,如果输入的值不是数字,会先将它转换成数字,然后在进行后面的操作。
字符串函数
concat()
连接函数正常情况下使用
concat()
的结果在极端情况下使用结果
这个函数比较简单,没有太多极端的情况,和
null
连接,结果就是null
length()
计算长度一个汉字算三个字符,一个数字或者字母算一个字符
极端情况的结果
char_length()
字符长度字母,数字,汉字都算一个字符
lower()
、upper()
大小写函数upper()
和lower()
用法一样,如果是不是字母,输出原值replace()
替换函数substring(string, start, length)
截取字符串函数start
表示开始截取的位置,length
数字表示截取的长度,start
从1
开始,不是0
start
如果是负数,表示从后往前开始日期函数
current_time()
获取当前系统的时间current_date()
获取当前系统的日期current_timestamp()
获取当前系统的时间 + 日期extract()
获取具体的年月日date()
获取时间的日期部分year()
获取时间的年份部分month()
获取时间的月份部分day()
获取时间的天数部分hour()
获取时间的小时部分minute()
获取时间的分钟部分second()
获取时间的秒部分转换函数
cast()
数据类型转换参数是个表达式,通过
as
分割 2 个参数,一个是原始数据,一个是目标类型将字符串数字转成
int
类型会报错,转成float
类型就不会报错还可以使用
decimal()
指定精度,接收两个参数,第一个参数是精度位(包括小数部分),第二个参数是小数位数下面的 SQL 语句中,为什么两个输出值是一样的?
因为小数位是两个,小数位加整数位不够八位,所以,最后呈现出来的是
6
。coalesce()
返回第一个非空数值The text was updated successfully, but these errors were encountered: