MySQL字符串函数、数字函数、日期函数、高级函数—/—<9>

一、数字函

1、向上取整

select ceil(column_name) from table_name;

例如:

SELECT CEIL(1.4)

其结果为 2,其同样可以对列进行向上取整操作

2、向下取整

select floor(column_name) from table_name;

例如:

SELECT FLOOR(1.4)

其结果为1

3、POW(x,y)/POWER(x,y) 返回 x 的 y 次方

例如:

select name,age,POW(age,2) from students;

对年龄做平方运算

4、RAND() 返回 0 到 1 的随机数

select name,age,rand() from students;

生成一列的随机数,都为0到1之间的小数

5、ROUND(x) 返回离 x 最近的整数

1)round(x,d),x保留d位小数
select 
	clazz
	,round(avg(age),2),avg(age)
from student
group by clazz
having avg(age)>22.5

同样是那个student学生表,,其内容大致如下:

        

返回结果为:

        

2)round(x) 对x四舍五入
select 
	clazz
	,avg(age)
	,round(avg(age))
from student
group by clazz

其返回结果为:

        

二、字符串函数

1、LENGTH 字节数

例如:

select LENGTH('wyl'),CHAR_LENGTH('wyl');

其返回结果为:

2、CHAR_LENGTH(s)/CHARACTER_LENGTH(s)返回字符串 s 的字符数

select clazz,LENGTH(clazz),CHAR_LENGTH(clazz),CHARACTER_LENGTH(clazz) from students;

其返回结果为:

3、CONCAT(s1,s2…sn)字符串 s1,s2 等多个字符串合并为一个字符串

select *,CONCAT(name,',',email,',',password) from users;

其中name、email、password为列名,即用逗号分隔将三列合并成一个新列

注意: 如果有一个字符串为空  则结果为空

4、CONCAT_WS(separator, str1, str2, ...)指定分隔符的拼接

可以指定分割符,遇到为null的值 结果合并会忽略他

select *,CONCAT_ws('#',name,email,password) from users;

以第一个参数当做分隔符,后面跟上要合并的列名

5、SUBSTR/SUBSTRING(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串

select *,SUBSTR(clazz,1,2) from students

6、STRCMP(s1,s2)比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1

select *,STRCMP(clazz,'文科六班\r') from students

上述代码表示列clazz列中的数据如果等于文科六班则返回0,不是的话则比较字符串的字符长度
输出结果如下所示:

三、日期函数

1、返回当前日期

CURDATE()/CURRENT_DATE()

SELECT CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP

其打印结果如下图所示,即日期、时间、时间戳以日期时间形式展现

2、返回当前时间

select CURRENT_TIME()/CURTIME()

3、返回当前日期和时间

select CURRENT_TIMESTAMP()

4、计算日期 d1->d2 之间相隔的天数

-- select DATEDIFF(d1,d2)

SELECT DATEDIFF('2024-05-07','1908-12-04')

5、计算时间差值

select TIMEDIFF('10:58:00','09:00:00')

6、计算当前时间戳(s)

SELECT UNIX_TIMESTAMP()

7、时间戳转日期

select FROM_UNIXTIME(UNIX_TIMESTAMP()-10*24*60*60)

即计算十天前的日期

8、增加指定的时间间隔

SELECT DATE_ADD(hire_date,interval -10 day) from emp;

emp表中的时间:    返回的时间:

也可以增加月份时间

SELECT DATE_ADD(hire_date,interval 10 month) from emp;

9、减去指定时间间隔

SELECT DATE_SUB(hire_date,interval 10 day) from emp

10、DATE_FORMAT(d,f)表达式 f的要求显示日期 d

select DATE_FORMAT(CURRENT_DATE,'%Y-%m-%d %H:%i:%S');

select DATE_FORMAT(CURRENT_DATE,'%m%d %Y');

将当前日期以给定的日期格式输出

  

11、字符串转变为日期

select STR_TO_DATE('2024王雨龙05朱超07张雪','%Y王雨龙%m朱超%d张雪');

12、获取日期的年份 月份 日 ,过了多少周(从0计数)、周几

select 
	YEAR('2024-05-07')
	,MONTH('2024-05-07')
	,day('2024-05-07')
	,week('2024-05-07')
	,WEEKDAY('2024-05-07')
	,WEEKOFYEAR('2024-05-07')

例如:你出生的那一天是当年的多少周 ,eg:'2000-07-30',当年的那一周映射到今年是那一天到那一天

select 
	WEEKOFYEAR(DATE_ADD('2000-07-30',INTERVAL 24 year))
	,WEEKDAY(DATE_ADD('2000-07-30',INTERVAL 24 year))
	,DATE_ADD(DATE_ADD('2000-07-30',INTERVAL 24 year),INTERVAL -8 day)
	,DATE_ADD(DATE_ADD('2000-07-30',INTERVAL 24 year),INTERVAL -2 day)

四、高级函数

1、IF(expr,v1,v2)

如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2

select 
	*
	,if(age=21,'1',if(age=22,'2',if(age=23,'3','4'))) 
from students;

年龄等于21的标记为1,等于22的标记为2,等于23的标记为3,其余的标记为4

2、IFNULL(v1,v2)

如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。

select name,IFNULL(email,'888@qq.com') from users;

users表:  返回结果: 

3、CASE (WHEN THEN) + ELSE END

-- CASE  (WHEN condition THEN val) + ELSE END
select 
	*
	,case 
		when age=21 then '1'
		when age=22 then '2' 
		when age=23 then '3' 
		when age=24 then '4'
		else '5' end
from student

和上述的 if函数差不多,其返回结果为:

4、CAST(x AS type)转换数据类型

支持的转换类型:BINARY、CHAR、DATE、DATETIME、TIME、DECIMAL

select CAST(age AS DECIMAL) from student;

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜就多练_0828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值