mysql高级函数FIND_IN_SET,ENUM和SET,LOCATE,ELT,FIELD,INTERVAL,COUNT,CAST,NULLIF,ISNULL,IFNULL,IF,CONVERT,COALESCE
mysql高级函数FIND_IN_SET,ENUM和SET,LOCATE,ELT,FIELD,INTERVAL,COUNT,CAST,NULLIF,ISNULL,IFNULL,IF,CONVERT,COALESCE
# FIND_IN_SET FIND_IN_SET(needle,haystack);
/**
第一个参数needle是要查找的字符串。
第二个参数haystack是要搜索的逗号分隔的字符串列表。
**/
SELECT FIND_IN_SET('111','222,111,333,444'); #查询结果:2
SELECT FIND_IN_SET('111','222,333,444'); #查询结果:0
## 加法
SELECT 1|4|16|2
/**
ENUM和SET
ENUM只取单值,但要注意,他的索引是从1开始,加了引号就是值,不加就是索引。
设定enum的格式:
enum("选项1","选项2","选项3",...);
实际上,enum的选项都会对应一个数字,依次是1,2,3,4,5...,最多有65535个选项
加了引号
设定set的格式:
set("选项1","选项2","选项3",...)
同样的,set的每个选项值也对应一个数字,依次是1,2,4,8,16...,最多有64个选项
**/


## LOCATE(substr,str) , LOCATE(substr,str,pos)
SELECT LOCATE('111','abcdef111222333'); # 7
SELECT LOCATE('111','abcdef111222333',10); # 0
SELECT LOCATE('111','abcdef111222333',6); # 7
# locate相对于like语句的执行效率较高,所以正常可以考虑使用locate代替like。
# MySQL ELT()返回指定索引的参数值,函数的第一个参数是索引值,第二个参数开始以后是字符串类型的参数值。当索引的值小于1或者大于后面参数的个数时,函数返回null
# ELT(N,str1,str2,str3,...)
SELECT ELT(3,1,100,200); # 200
SELECT ELT(2,1,100,200); # 100
SELECT ELT(5,1,100,200); # null
/**
FIELD()函数
MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序
函数使用格式如下:
order by field(str,str1,str2,str3,str4……),str与str1,str2,str3,str4比较,其中str指的是字段名字,
意为:字段str按照字符串str1,str2,str3,str4的顺序返回查询到的结果集。如果表中str字段值不存在于str1,str2,str3,str4中的记录,放在结果集最前面返回。
select * from ta order by field(name,'seiki','iris','xut');
不在str1,str2,str3中的内容,放在最前面返回,str值相同按照主键的顺序
**/
/**
INTERVAL(N,N1,N2,N3,..........)
其中,N是要判断的数值,N1,N2,N3,...是分段的间隔。
这个函数的返回值是段的位置:
如果N<N1,则返回0,
如果N1<=N<N2,则返回1,
如果N2<=N<N3,则返回2。
所以,区间是前闭后开的。
**/
# INTERVAL(N,N1,N2,N3,..........) 列表值必须是 N1<N2<N3的形式才能正常工作。
SELECT INTERVAL(33,20,30,40,50,60); # 2
SELECT INTERVAL(55,20,30,40,50,60); # 4
SELECT INTERVAL(3,20,30,40,50,60); # 0
SELECT INTERVAL(NULL,20,30,40,50,60); # -1
SELECT INTERVAL('c','b','d'); # 2
#elt函数与interval实现分组统计
CREATE TABLE `k1` (
`id` INT (11),
`yb` INT (11)
);
INSERT INTO `k1` (`id`, `yb`) VALUES('1','100');
INSERT INTO `k1` (`id`, `yb`) VALUES('2','11');
INSERT INTO `k1` (`id`, `yb`) VALUES('3','5');
INSERT INTO `k1` (`id`, `yb`) VALUES('4','501');
INSERT INTO `k1` (`id`, `yb`) VALUES('5','1501');
INSERT INTO `k1` (`id`, `yb`) VALUES('6','1');
SELECT * FROM k1;
SELECT ELT(INTERVAL(d.yb,0, 100, 500, 1000), '1/less100', '2/100to500', '3/500to1000', '4/more1000') AS yb_level, COUNT(d.id) AS cnt
FROM k1 d
GROUP BY ELT(INTERVAL(d.yb, 0, 100, 500, 1000), '1/less100', '2/100to500', '3/500to1000', '4/more1000K');

# COUNT 带条件计数
# count(*) 包含 null 值的条目,count(字段) 则不包含 null的字段
SELECT COUNT(yb > 200 OR NULL) FROM k1; # 2
SELECT COUNT(IF(yb > 200, 1, NULL)) FROM k1; # 2
SELECT COUNT(CASE WHEN yb > 200 THEN 1 END) FROM k1; # 2
# CAST(x AS type)转换数据类型
/**
类型可以为:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和时间型
DECIMAL float型
SIGNED int
TIME 时间型
**/
SELECT CAST("2021-05-18" AS DATE); # 2021-05-18
SELECT CAST("20210518" AS DATE); # 2021-05-18
SELECT CAST("2021/05/18" AS DATE); # 2021-05-18
SELECT CAST('2015110315312675555555555555555555555555555555777' AS SIGNED) # -1
SELECT CAST('2015-11-03 15:31:26' AS CHAR) # 2015-11-03 15:31:26
SELECT CAST('2015-11-03 15:31:26' AS DATETIME) # 2015-11-03 15:31:26
SELECT CAST('2015-11-03 15:31:26' AS DATE) # 2015-11-03
SELECT CAST('2015-11-03 15:31:26' AS TIME) # 15:31:26
SELECT CAST('20' AS DECIMAL(10, 2)) # 20.00
# NULLIF(expr1, expr2)比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1
SELECT NULLIF(25, 25) ### null
SELECT NULLIF(25, 251) ### 25
# ISNULL(expression)判断表达式是否为 NULL
SELECT ISNULL(NULL); # 1 (是)
SELECT ISNULL(1+1); # 0 (否)
SELECT ISNULL(1=2); # 0 (否)
#IFNULL(v1,v2)如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
SELECT IFNULL(NULL,'Hello World'); #Hello World
SELECT IFNULL('hello','Hello World'); # hello
# IF(expr,v1,v2)如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
SELECT IF(1 > 0,'正确','错误') # 正确
# CONVERT(s USING cs)函数将字符串 s 的字符集变成 cs
SELECT CHARSET('ABC') # utf-8
SELECT CHARSET(CONVERT('ABC' USING gbk)) # gbk
# COALESCE(expr1, expr2, ...., expr_n)返回参数中的第一个非空表达式(从左向右)
SELECT COALESCE(NULL, NULL, NULL, 'csdn.com', NULL, 'google.com'); # csdn.com
mysql高级函数FIND_IN_SET,ENUM和SET,LOCATE,ELT,FIELD,INTERVAL,COUNT,CAST,NULLIF,ISNULL,IFNULL,IF,CONVERT,COALESCE的更多相关文章
- MySQL高级函数case的使用技巧----与sum结合实现分段统计
case 函数 CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resu ...
- mysql函数之一:INSTR、LOCATE、POSITION VS LIKE
LOCATE.POSITION和INSTR函数相似功能实例 使用LOCATE.POSITION和INSTR函数查找字符串中指定子字符串的开始位置.SQL语句如下: mysql>SELECT LO ...
- Mysql中使用find_in_set函数查找字符串
mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...
- Mysql函数FIND_IN_SET()的使用方法
有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1.智能机,2.Andri ...
- MySQL函数find_in_set介绍
MySQL函数find_in_set介绍 数据库中的某个字段我十以字符存储的,同时又以","隔开的.如果想要查询这个字段中包含某个字符串该怎么查询?使用like?感觉不妥,如果使用 ...
- MySQL中的find_in_set()函数使用技巧心得与应用场景总结
Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,CSDN官方首发原创文章 企业博客 CSDN.com 个人博 ...
- Mysql查询用逗号分隔的字段-字符串函数FIND_IN_SET(),以及此函数与in()函数的区别
查询用逗号分隔的字段,可以用字符串函数FIND_IN_SET(): 查询数据库表中某个字段(值分行显示),可以用函数in(). 今天工作中遇到一个问题,就是用FIND_IN_SET()函数解决的. 第 ...
- mysql常用函数参考
mysql常用函数参考 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL, ...
- mysql字符串函数(转载)
对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的 最左面字符的ASCII代码值.如果str是空字符串, 返回0.如果str是NULL,返回NULL. mysq ...
- 小白学习mysql之函数
## 导语 曾经我以为,学会了select.update.insert和delete之后,我就学会了数据库~,要不是到公司看到SQL里充满了密密麻麻的的各种函数,我差点就信了~,当初的自己是多么的天真 ...
随机推荐
- JZOJ 7339.改试卷
\(\text{Solution}\) 又忘了线段树分治!! 显然维护一个上凸包 发现加点和删点可以变成限制存在时间 然后把点放在线段树上,线段树下标表示时间 加点时先把点按横坐标排序,然后就可以单调 ...
- rin和快速迭代
链接:https://ac.nowcoder.com/acm/contest/3002/E rin最近喜欢上了数论. 然而数论实在太复杂了,她只能研究一些简单的问题. 这天,她在研究正整数因子个数的时 ...
- AIR32F103(九) CAN总线的通信和ID过滤机制及实例
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- Linux 用户组管理
用户组 群组是大家都熟悉的东西,群组有群主,也就是创建者.群管理员有一定的管理权限,比如上传群文件.管理成员等权限:群成员也有一定的权限,比如下载群文件. 私有组 一般来说,每一个用户都有自己的一个初 ...
- LeetCode算法训练-动态规划
欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练-动态规划 理论知识 动态规划当前状态是由前一个状态推导出来的,而贪心没有状态的转移 动态规划需要借助dp数组,可能是一维也可能是二维的 首先 ...
- ansible 离线部署
1.安装 python 环境 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh s ...
- vue模板三目运算判断报错
问题: 关于vue三目运算符提示报错 1.三目运算符等于判断 {{ a==b ? '是' : '否'}} 2.其他三目运算符 <代表小于号(<) >代表大于符号(>) ≤表示小 ...
- Execution failed for task ':app:checkDebugDuplicateClasses'解决办法
A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable & ...
- ChatGPT is at capacity right now.ChatGPT Plus subscriber login Add your email for a personalized login link的解决办法
原因 你的ip地区用的人过多. 解决办法 在右侧页面填入邮箱,能收到邮件立刻就能登录,如果没有,就换地区试试,不行就等等吧 邮件示例:
- 钉钉h5开发流程
1.先在钉钉开发者后台 https://login.dingtalk.com/oauth2/challenge.htm?redirect_uri=https%3A%2F%2Fopen-dev.ding ...