1.replace() 替换函数
语法介绍:
REPLACE(string, from_string, new_string)
| 参数名 | 作用 |
|---|---|
| from | 原始字符串 |
| from_string | 要替换的字符串 |
| new_string | 新的替换字符串 |
使用示例:
2.foramt() 数字格式化函数
语法介绍:
FORMAT(number, decimal_places) 将数字格式化为“#,###,###.##”
| 参数名 | 作用 |
|---|---|
| number | 目标数字(如果是非数字,处理结果就是0) |
| decimal_places | 保留小数位数(四舍五入) |
使用示例:
SELECT FORMAT(250500.5634, 2);
-- 250,500.56
SELECT FORMAT(250500.5634, 0);
-- 250,501
SELECT FORMAT('哈哈', 3);
-- 0.000
SELECT FORMAT('123456.789', 5);
-- 123,456.78900
3.lenght() char_lenght()系列 计算字符串长度函数
语法介绍:
在MySQL中,LENGTH()和CHAR_LENGTH()是两个用于计算字符串长度的函数(character_length()和char_length()完全相同,一个是全称,一个是简写),它们之间有一些区别。
- LENGTH()函数:用于计算字符串的字节数(即字符串的实际长度)。对于使用多字节字符集(如UTF-8)存储的字符串,每个字符可能由多个字节组成。因此,LENGTH()函数返回的是字符串中的字节数。
- CHAR_LENGTH()函数:用于计算字符串的字符数。对于使用多字节字符集存储的字符串,会将每个字符作为一个单位进行计数。它会考虑到字符编码的规则,确保正确计算字符串中的字符数。
总结:
- 如果你需要计算字符串的字节数,可以使用LENGTH()函数。
- 如果你需要计算字符串的字符数(即字符的个数),可以使用CHAR_LENGTH()函数。
- 需要注意的是,对于使用单字节字符集(如ASCII)存储的字符串,LENGTH()和CHAR_LENGTH()函数将返回相同的结果,因为每个字符只占用一个字节。然而,对于使用多字节字符集存储的字符串,它们的结果可能不同
使用示例:
-- 字符集是utf8mb4
SELECT LENGTH('你好世界'); -- 返回12
SELECT CHAR_LENGTH('你好世界'); -- 返回4
4.substring_index() 分隔字符串函数
语法介绍:
用于截取一个字符串中指定分隔符的前部分或后部分
SUBSTRING_INDEX(string, delimiter, count)
| 参数名 | 作用 |
|---|---|
| string | 要截取的字符串 |
| delimiter | 分隔符,用于指定截取的位置 |
| count | 指定截取的次数,可以是正数或负数。正数表示从左边开始截取,负数表示从右边开始截取。 |
注意:
- 当count为正数时,返回从左边开始计算的前count个分隔符之前的部分。
- 当count为负数时,返回从右边开始计算的前|count|个分隔符之后的部分(即从右边开始截取)
使用示例:
SELECT SUBSTRING_INDEX("www.begtut.com", ".", 2); -- www.begtut
SELECT SUBSTRING_INDEX("www.begtut.com", ".", 1); -- www
SELECT SUBSTRING_INDEX("www.begtut.com", ".", 3); -- www.begtut.com
SELECT SUBSTRING_INDEX("www.begtut.com", ".", -1); -- com
SELECT SUBSTRING_INDEX("www.begtut.com", ".", -2); -- begtut.com
-- 将字符串'a,b,c,d'按逗号分隔,返回前两个分隔符之前的部分,即'a,b'。
SELECT SUBSTRING_INDEX('a,b,c,d', ',', 2); -- 返回'a,b'
-- 将字符串'a,b,c,d'按逗号分隔,返回倒数两个分隔符之后的部分,即'c,d'。
SELECT SUBSTRING_INDEX('a,b,c,d', ',', -2); -- 返回'c,d'
-- 将字符串'www.example.com'按点号分隔,返回第一个点号之前的部分,即'www'。
SELECT SUBSTRING_INDEX('www.example.com', '.', 1); -- 返回'www'
-- 将字符串'www.example.com'按点号分隔,返回最后一个点号之后的部分,即'com'。
SELECT SUBSTRING_INDEX('www.example.com', '.', -1); -- 返回'com'
5.isnull() 过滤null函数
语法介绍:
isnull(var)的作用和var is null的作用一样,都是判断变量值是否为null
isnull(var)只能用在where后面,不能用在select的列中
使用示例:
select * from user where name is null;
select * from user where isnull(name);
6.strcmp() 比较字符串相等函数
语法介绍
STRCMP(str1, str2) 是一个用来比较两个字符串是否相等的函数。该函数接受两个参数,分别是字符串 A 和字符串 B。 STRCMP() 将两个字符串进行比较,并返回一个整数值,该值分为三种情况:
- 如果字符串 A = 字符串 B,则返回 0;
- 如果字符串 A < 字符串 B,则返回 -1;
- 如果字符串 A > 字符串 B,则返回 1。
注意: - STRCMP() 函数对字符串区分大小写;
- 在比较两个字符串时,先比较第一个字符的 ASCII 码值,如果相等,则以此类推,直到比较出结果为止。
使用示例:
SELECT STRCMP('apple', 'apple'); -- 0
SELECT STRCMP('apple', 'banana'); -- -1
SELECT STRCMP('banana', 'apple'); -- 1
SELECT STRCMP('aaa', 'aaaa'); -- -1
SELECT STRCMP('aba', 'aaaa'); -- 1
7.field()
在MySQL中,FIELD函数用于返回列表中某个字段的索引位置,从1开始。它的使用方式如下:
- FIELD(value, value1, value2,...)
其中,value是要查找索引位置的值,value1, value2, ...是一个列表,表示要在其中查找索引位置的值。
FIELD函数将会返回value在列表中的位置,如果找不到,则返回0。
FIELD函数还可以与ORDER BY子句结合使用,以实现按照指定的值列表的顺序对查询结果进行排序
8.group_concat分组拼接
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
SELECT
uid,
group_concat( DISTINCT CONCAT ( date ( start_time ), ':', tag ) ORDER BY start_time SEPARATOR ';' )
FROM
exam_record
INNER JOIN examination_info USING ( exam_id )
GROUP BY
uid;
注意:当数据太大,group_concat超出了默认值1024,超过就会截断,group_concat查询出来的数据就会不全。 coalesce()和ifnull()非空判断
9.coalesce()和ifnull()非空判断
coalesce
coalesce(expression_1, expression_2, ...,expression_n)
遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。
示例1
<font style="color:rgb(34, 34, 34);">select coalesce(real_name, “xiaoai”) from table_name</font>
当real_name 为null值的时候,将返回xiaoai,否则将返回real_name的具体值。
示例2
<font style="color:rgb(34, 34, 34);">elect coalesce(real_name ,nick_name,“xiaoai”) from table_name</font>
当real_name不为null,那么无论nick_name是否为null,都将返回real_name的具体值;
当real_name为null,而nick_name,不为null的时候,返回nick_name具体值。
只有当real_name和nick_name都为null的时候,才返回xiaoai。
.ifnull
IFNULL(expression, alt_value)
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
示例
第一个参数为 NULL:
<font style="color:rgb(34, 34, 34);">SELECT IFNULL(NULL, "RUNOOB");</font>
以上实例输出结果为:RUNOOB
第一个参数不为 NULL:
<font style="color:rgb(34, 34, 34);">SELECT IFNULL("Hello", "RUNOOB");</font>
以上实例输出结果为:Hello
<font style="color:rgb(34, 34, 34);">select IFNULL(real_name, “xiaoai”) from table_name</font>
以上实例输出结果为:如果real_name是null,则输出xiaoai;如果real_name不是null,则输出real_name
区别
- 参数个数:COALESCE函数可以接受多个参数,而IFNULL函数只能接受两个参数。
- 返回值:COALESCE函数返回参数列表中第一个非空值,如果所有参数都为空,则返回NULL。IFNULL函数返回第一个非空的参数,如果第一个参数为空,则返回第二个参数。
10.if()函数
IF(expr1,expr2,expr3)
如果expr1是TRUE ,则IF() 返回expr2。否则,它返回expr3。
示例1
示例2
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'
11.窗口函数8.0开始支持
dense_rank()
rank()
12.聚合函数
分类:
聚合函数是用来对一组数据进行计算并返回单个结果的函数,它们可以对列的值进行汇总、计算平均值、计算最大最小值等。
以下是一些常用的聚合函数:
- COUNT():用于计算满足指定条件的行数。例如,SELECT COUNT(*) FROM table_name 将返回表中的总行数。
- SUM():用于计算指定列的总和。例如,SELECT SUM(column_name) FROM table_name 将返回指定列值的总和。
- AVG():用于计算指定列的平均值。例如,SELECT AVG(column_name) FROM table_name 将返回指定列值的平均值。
- MIN():用于计算指定列的最小值。例如,SELECT MIN(column_name) FROM table_name 将返回指定列值的最小值。
- MAX():用于计算指定列的最大值。例如,SELECT MAX(column_name) FROM table_name 将返回指定列值的最大值。
注意:
- count(字段)不统计NULL记录,即表示满足条件的数据行里参数字段不为NULL的行
- count(1)和count(*)会记录NULL值
- 注意max(), min(), avg()都会忽略null值,而不是将其作为“0”参与计算
- sum(a)单列求和时如果a为null,则忽略这行的记录,多列求值sum(a+b+c)时,如果运算列a,b,c中任意一列的值为NULL,则忽略这行的记录
示例1:
select
tag,
difficulty,
round(
(sum(score) - max(score) - min(score)) / (count(score) -2),
1
) as clip_avg_score
from
exam_record
inner join examination_info using (exam_id)
where
tag = 'SQL'
and difficulty = 'hard';
示例2:
select
count(*) as total_pv,
count(score) as complete_pv,
count(
distinct case
when score is not null then exam_id
end
) as complete_exam_cnt
from
exam_record
select count(*) as total_pv,
count(score) as complete_pv,
count(distinct exam_id,score IS NOT NULL or null) as complete_exam_cnt
from exam_record
示例3:
select<font style="color:rgb(51, 51, 51);">在MySQL中,ANY_VALUE()是一个聚合函数,用于在SELECT查询中获取分组中的任意一个非聚合列的值。它可以在使用GROUP BY子句进行分组的查询中使用。</font>
<font style="color:rgb(51, 51, 51);">当在SELECT语句中使用GROUP BY子句时,通常需要在SELECT列表中包含聚合函数(如SUM、COUNT、MAX等)来对每个分组进行聚合计算。然而,对于其他非聚合列,MySQL要求在SELECT列表中明确指定它们的聚合方式(如使用MIN、MAX等聚合函数),否则会报错。</font>
<font style="color:rgb(51, 51, 51);">但是,如果我们只需要获取分组中的任意一个非聚合列的值,而不关心它的具体值是哪个,可以使用ANY_VALUE()函数。ANY_VALUE()函数可以放在非聚合列的前面,表示获取该列的任意一个值。</font>
<font style="color:rgb(51, 51, 51);">以下是一个示例:</font>
```plain
SELECT classification, ANY_VALUE(user_id) AS any_user_id
FROM exam_scores
GROUP BY classification;
13.any_value()聚合函数
在MySQL中,ANY_VALUE()是一个聚合函数,用于在SELECT查询中获取分组中的任意一个非聚合列的值。它可以在使用GROUP BY子句进行分组的查询中使用。
当在SELECT语句中使用GROUP BY子句时,通常需要在SELECT列表中包含聚合函数(如SUM、COUNT、MAX等)来对每个分组进行聚合计算。然而,对于其他非聚合列,MySQL要求在SELECT列表中明确指定它们的聚合方式(如使用MIN、MAX等聚合函数),否则会报错。
但是,如果我们只需要获取分组中的任意一个非聚合列的值,而不关心它的具体值是哪个,可以使用ANY_VALUE()函数。ANY_VALUE()函数可以放在非聚合列的前面,表示获取该列的任意一个值。
以下是一个示例:
- SELECT classification, ANY_VALUE(user_id) AS any_user_id
- FROM exam_scores
- GROUP BY classification;
上述查询按照试卷分类对成绩表进行分组,并使用ANY_VALUE()函数获取每个组中的任意一个user_id的值。通过将ANY_VALUE(user_id)作为一个非聚合列在SELECT列表中使用,我们可以避免对user_id进行额外的聚合函数操作。
需要注意的是,ANY_VALUE()函数在MySQL 5.7.5及以上版本中可用。在早期版本中,可能需要使用其他方法来获取分组中的任意一个非聚合列的值。
min(score) min_score_over_avg
from exam_record inner join examination_info using (exam_id) where tag = 'SQL' and score >= ( select avg(score) from exam_record inner join examination_info using (exam_id) where tag = 'SQL' )
14.concat及ws拼接
concat
CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
concat_ws
CONCAT_WS(separator, str1, str2,...)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:
如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。
15.大小写转换lower和upper
MySQL 字符串大小写转化函数有两对: lower(), uppper() 和 lcase(), ucase():
select lower('AAA');
select upper('aaa');
select lcase('AAA');
select ucase('aaa');
16.截取函数
TRUNCATE(x,d)截断数值
TRUNCATE(X,D) 是MySQL自带的一个系统函数。
其中,X是数值,D是保留小数的位数。
其作用就是按照小数位数,进行数值截取(此处的截取是按保留位数直接进行截取,没有四舍五入)。
规则如下:
1)当 D 大于0,是对数值 X 的小数位数进行操作;
2)当 D 等于0,是将数值 X 的小数部分去除,只保留整数部分;
3)当 D 小于0,是将数值 X 的小数部分去除,并将整数部分按照 D 指定位数,用 0 替换。
SELECT TRUNCATE(123.4567, 3); # 123.456
SELECT TRUNCATE(123.4567, 2); # 123.45
SELECT TRUNCATE(123.4567, 1); # 123.4
SELECT TRUNCATE(123.4567, 0); # 123
SELECT TRUNCATE(123.4567, -1); # 120
SELECT TRUNCATE(123.4567, -2); # 100
SELECT TRUNCATE(123.4567, -3); # 0
SELECT TRUNCATE(-123.4567, 3); # -123.456
SELECT TRUNCATE(-123.4567, 2); # -123.45
SELECT TRUNCATE(-123.4567, 1); # -123.4
SELECT TRUNCATE(-123.4567, 0); # -123
SELECT TRUNCATE(-123.4567, -1); # -120
SELECT TRUNCATE(-123.4567, -2); # -100
SELECT TRUNCATE(-123.4567, -3); # 0
left(str, length)
left(str, length)是从左边第一位开始截取指定长度字符串。length不能是负数,如果是负数不会报错,结果是null,等价于0
right(str, length)
substring(str, index, length)
substring(str, index, length)是从指定开始位置截取指定长度字符串。
其中,str是要截取的字符串,index是截取的起始位置,length是截取的长度。
SELECT SUBSTRING('Hello World',7,5)AS result;
上述示例将返回字符串'World',从第7个字符开始,截取长度为5的子串。
注意: 使用的时候函数名和括号之间不能有空格,必须紧挨着
正确示例
SELECT SUBSTRING('Hello World', 7, 5) AS result;
错误示例
SELECT SUBSTRING ('Hello World', 7, 5) AS result;
substring(str, index)
substring(str, index)是从指定开始位置截字符串,截取到最后。
substr()
区别:
- 在MySQL中,SUBSTRING和SUBSTR这两个函数可以互换使用,没有明显的功能区别。
- SUBSTRING函数的语法在标准SQL中是被定义的,而SUBSTR函数在标准SQL中并没有明确的定义,但是MySQL支持使用SUBSTR函数来实现相同的功能。
- 在一些其他数据库中,如Oracle,SUBSTR是标准的字符串截取函数,而SUBSTRING并不是标准的函数。
综上所述,SUBSTRING和SUBSTR函数在MySQL中用于提取字符串的子串,它们的作用和用法几乎相同。它们的选择可以基于个人习惯和代码风格。
17.数学计算函数
round保留小数
在mysql中,round函数用于数据的四舍五入,它有两种形式
- round(x,d) ,x指要处理的数,d是指保留几位小数
select round(100.521, 1); -- 100.5
select round(100.521, 2); -- 100.52
- round(x) ,其实就是round(x,0),也就是默认d为0;
select round(100.5); -- 101
select round(100.4); -- 100
abs(x) 绝对值
select ABS(-5); 5
PI() 圆周率 默认6位小数
select PI(); 3.141593
mod(x, y)求余数
mod(被除数, 除数)
select MOD(6,2); -- 0
select MOD(6,5); -- 1
ceil和ceiling
ceil和ceiling相同,前者是后者的缩写,ceil(x)作用是返回不小于x的最小整数
select CEIL(2.5); -- 3
select CEIL(-2.5); -- -2
floor(x)
返回不大于x的最大正整数
select FLOOR(3.3); -- 3
select FLOOR(-3.3); -- -4
rand()
获取0-1之间随机数
rand(x)
获取0-1之间随机数;x值相同则产生的随机数相同
无论执行多少次rand(2),只要2不变,结果就不变
log(x)以e为底数的对数
log10(x)以10为底数的对数
18.查找函数instr和locate
instr
INSTR(str, substr)函数用于返回子串 substr 在字符串 str 中第一次出现的索引位置,从1开始,没有找到子串时返回 0
INSTR(str, substr, n)函数用于返回子串 substr 在字符串 str 中从第n个位置开始,第一次出现的索引位置
locate
LOCATE(substr, str)函数返回子串 substr 在字符串 str 中从位置 pos 开始第一次出现的索引位置,和 INSTR(str,substr) 函数唯一的不同就是参数的顺序相反。
19.日期函数
当前日期
select CURRENT_DATE(); -- 2022-11-14
select CURRENT_DATE; -- 2022-11-14
select CURDATE(); -- 2022-11-14
select CURRENT_DATE()+0; -- 20221114
select CURRENT_DATE+0; -- 20221114
select CURDATE()+0; -- 20221114
当前时间
select CURRENT_TIME(); -- 18:14:18
select CURRENT_TIME; -- 18:14:18
select CURTIME(); -- 18:14:18
select CURTIME()+0; -- 181418
当前日期时间
select CURRENT_TIMESTAMP(); -- 2022-11-14 18:15:06
select NOW(); -- 2022-11-14 18:16:20
格式化时间(把时间类型转化成指定格式字符串)
DATE_FORMAT(date,format) -- date 参数是合法的日期。format 规定日期/时间的输出格式。
select DATE_FORMAT(NOW(),'%m/%d/%Y'); -- 11/15/2022
select DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'); -- 2022/11/15 10:14:56
select DATE_FORMAT(NOW(),'%Y年%m月%d日 %T'); -- 2022年11月15日 10:24:04
-- %T 可以代替 %H:%i:%s
| 格式 | 描述 |
|---|---|
| %a | 缩写星期名 |
| %b | 缩写月名 |
| %c | 月,数值 |
| %D | 带有英文前缀的月中的天 |
| %d | 月的天,数值(00-31) |
| %e | 月的天,数值(0-31) |
| %f | 微秒 |
| %H | 小时 (00-23) |
| %h | 小时 (01-12) |
| %I | 小时 (01-12) |
| %i | 分钟,数值(00-59) |
| %j | 年的天 (001-366) |
| %k | 小时 (0-23) |
| %l | 小时 (1-12) |
| %M | 月名 |
| %m | 月,数值(00-12) |
| %p | AM 或 PM |
| %r | 时间,12-小时(hh:mm:ss AM 或 PM) |
| %S | 秒(00-59) |
| %s | 秒(00-59) |
| %T | 时间, 24-小时 (hh:mm:ss) |
| %U | 周 (00-53) 星期日是一周的第一天 |
| %u | 周 (00-53) 星期一是一周的第一天 |
| %V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
| %v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
| %W | 星期名 |
| %w | 周的天 (0=星期日, 6=星期六) |
| %X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
| %x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
| %Y | 年,4 位 |
| %y | 年,2 位 |
时间计算
加法
DATE_ADD() 函数向日期添加指定的时间间隔。
DATE_ADD(date,INTERVAL expr type)
-- date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
-- type 参数可以是 DAY HOUR MINUTE SECOND YEAR MONTH 等更多
-- NOW() 是 2022-11-15 10:42:44
select DATE_ADD(NOW(), INTERVAL 2 YEAR); -- 2024-11-15 10:42:44
select DATE_ADD(NOW(), INTERVAL 1 MONTH); -- 2022-12-15 10:42:44
select DATE_ADD(NOW(), INTERVAL 10 DAY); -- 2022-11-25 10:42:44
select DATE_ADD(NOW(), INTERVAL 2 HOUR); -- 2022-11-25 12:42:44
select '2021-09-01 22:11:12' +INTERVAL 50 minute;
select DATE_ADD('2021-09-01 22:11:12',INTERVAL 50 minute);
ADDDATE()和DATE_ADD()作用相同,但当只进行以日为单位的日期加减时ADDDATE()有一个简写的使用方法
select ADDDATE(NOW(),1) <=> select DATE_ADD(NOW(), INTERVAL 1 DAY)
减法
-- 语法和DATE_ADD()相同
select DATE_SUB(NOW(),INTERVAL 1 YEAR); -- 2021-11-15 10:47:35
-- 当前时间先加2小时,再减去1年
select DATE_SUB(DATE_ADD(NOW(), INTERVAL 2 HOUR),INTERVAL 1 YEAR); -- 2021-11-15 12:50:22
SUBDATE()和ADDDATE()同理
相差时间
TIMESTAMPDIFF(unit,start,end) 返回两个日期之间的时间
-- unit 相差的时间单位 SECOND MINUTE HOUR DAY WEEK MONTH QUARTER - 季度(3个月) YEAR
-- start 起始时间
-- end 结束时间
-- 结果有正负之分,如果start > end,那么返回负数
select TIMESTAMPDIFF(MINUTE,'2023-10-10 10:10:10','2023-10-10 10:15:10') -- 5
相差天数
DATEDIFF() 函数返回两个日期之间的天数。
DATEDIFF(date1,date2)
-- date1 和 date2 参数是合法的日期或日期/时间表达式。
-- 只有值的日期部分参与计算。
SELECT DATEDIFF('2022-11-29','2022-10-30'); -- 30
SELECT DATEDIFF('2022-11-29','2022-12-30'); -- -31
SELECT DATEDIFF(DATE_ADD(NOW(), INTERVAL 2 YEAR), NOW()); -- 731
-- 如果想要得到正数,日期大的要放在前面
返回日期部分
DATE() 函数返回日期或日期/时间表达式的日期部分。
DATE(date) -- date 参数是合法的日期表达式。
select DATE(NOW()); -- 2022-11-15
select DATE('2022-11-29 10:47:35'); -- 2022-11-29
select DATE(DATE_ADD(NOW(), INTERVAL 2 YEAR)); -- 2024-11-15
返回日期/时间的单独部分
EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
EXTRACT(unit FROM date)
date 参数是合法的日期表达式。
unit 参数可以是下列的值:SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, WEEK, YEAR_MONTH等等更多
-- NOW() 2022-11-15 11:11:12
select EXTRACT(YEAR FROM NOW()); -- 2022
select EXTRACT(MONTH FROM NOW()); -- 11
select EXTRACT(DAY FROM NOW()); -- 15
select EXTRACT(HOUR FROM NOW()); -- 11
select EXTRACT(MINUTE FROM NOW()); -- 11
select EXTRACT(SECOND FROM NOW()); -- 12
select EXTRACT(WEEK FROM NOW()); -- 46 今年的第46周
select EXTRACT(YEAR_MONTH FROM NOW()); -- 202211
select EXTRACT(QUARTER FROM NOW()); -- 4 今年的第4季度
select year(CURRENT_DATE());
select month(CURRENT_DATE());
select day(CURRENT_DATE());
select HOUR(CURRENT_TIME());
select MINUTE(CURRENT_TIME());
select SECOND(CURRENT_TIME());
select year('2023-08-30 18:31:22');
select month('2023-08-30 18:31:22');
select day('2023-08-30 18:31:22');
select HOUR('2023-08-30 18:31:22');
select MINUTE('2023-08-30 18:31:22');
select SECOND('2023-08-30 18:31:22');
字符串转datetime类型
str_to_date
str_to_date(str, format)
str:要格式化为日期的字符串
format:要使用的常用格式
| format格式 | 描述 |
|---|---|
| %Y | 年份为数字,4位数值 |
| %y | 年份为数字,2位数值 |
| %M | 月份名称(1月至12月) |
| %m | 月份名称作为数值(00到12) |
| %d | 作为数值的月份日期(01到31) |
| %e | 每月的某一天作为数值(0到31) |
| %H | 小时(00到23) |
| %h | 小时(00到12) |
| %i | 分钟(00至59) |
| %S | 秒(00到59) |
| %s | 秒(00到59) |
| %T | 24小时格式的时间(hh:mm:ss) |
| %r | 时间为12小时AM或PM格式(hh:mm:ss AM / PM) |
| %p | 上午或下午 |
| %f | 微秒(000000至999999) |
-- 最常用
select STR_TO_DATE('2005-12-21 18:30:26','%Y-%m-%d %H:%i:%s');
-- 2005-12-21 18:30:26
select STR_TO_DATE('2005-12-21 18:30:26','%Y-%m-%d %T');
-- 2005-12-21 18:30:26
select STR_TO_DATE('2005-12-21','%Y-%m-%d');
-- 2005-12-21
select STR_TO_DATE('1995/12/21','%Y/%m/%d');
-- 1995-12-21
select STR_TO_DATE('2005/12/21 8:30:26','%Y/%m/%d %H:%i:%s');
-- 2005-12-21 08:30:26
select STR_TO_DATE('2005/12/21 18:30:26:1234','%Y/%m/%d %H:%i:%s:%f');
-- 2005-12-21 18:30:26.123400
select STR_TO_DATE('2005/12/21 18:30:26','%Y/%m/%d %T');
-- 2005-12-21 18:30:26
select STR_TO_DATE('2005/12/21 6:30:26 PM','%Y/%m/%d %r');
-- 2005-12-21 18:30:26
CAST
CAST() 函数用于类型转换,将(任何类型的)值转换为指定的数据类型
CAST(字符串值 AS datetime)
select CAST('2005-12-21 18:30:26' AS datetime);
-- 2005-12-21 18:30:26
select CAST('2005-12-21' AS date);
-- 2005-12-21
20.convert()转换
- 数据类型转换:CONVERT函数用于将一个数据类型转换为另一个数据类型。它可以将字符串、日期、数值等类型进行转换。例如,可以将一个字符串转换为数字,或者将一个日期转换为字符串等。
- 字符集转换:CONVERT函数还可以用于进行字符集的转换。通过指定不同的字符集,可以将一个字符串从一个字符集转换为另一个字符集。这对于解决字符集不匹配的问题非常有用。
- 格式化输出:CONVERT函数还可以用于格式化输出。通过指定适当的格式,可以将数据以某种特定的格式进行输出,如货币格式、日期时间格式等。
下面是一些使用CONVERT函数的示例:
- 将数字转换为字符串:SELECT CONVERT(123, CHAR);
- 将字符串转换为数字:SELECT CONVERT('456', SIGNED);
- 将日期转换为字符串:SELECT CONVERT(NOW(), CHAR);
- 进行字符集转换:SELECT CONVERT('中文', CONVERT('中文' USING GBK) USING UTF8);
- 格式化输出日期:SELECT CONVERT(NOW(), DATETIME FORMAT 'YYYY-MM-DD HH:MI:SS');
需要注意的是,CONVERT函数的具体用法和可用的参数取决于MySQL的版本和所使用的函数库。在使用CONVERT函数时,应该根据具体需求和MySQL的文档来正确使用和理解该函数。