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的更多相关文章

  1. MySQL高级函数case的使用技巧----与sum结合实现分段统计

    case 函数 CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resu ...

  2. mysql函数之一:INSTR、LOCATE、POSITION VS LIKE

    LOCATE.POSITION和INSTR函数相似功能实例 使用LOCATE.POSITION和INSTR函数查找字符串中指定子字符串的开始位置.SQL语句如下: mysql>SELECT LO ...

  3. Mysql中使用find_in_set函数查找字符串

    mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...

  4. Mysql函数FIND_IN_SET()的使用方法

    有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1.智能机,2.Andri ...

  5. MySQL函数find_in_set介绍

    MySQL函数find_in_set介绍 数据库中的某个字段我十以字符存储的,同时又以","隔开的.如果想要查询这个字段中包含某个字符串该怎么查询?使用like?感觉不妥,如果使用 ...

  6. MySQL中的find_in_set()函数使用技巧心得与应用场景总结

    Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,CSDN官方首发原创文章 企业博客 CSDN.com 个人博 ...

  7. Mysql查询用逗号分隔的字段-字符串函数FIND_IN_SET(),以及此函数与in()函数的区别

    查询用逗号分隔的字段,可以用字符串函数FIND_IN_SET(): 查询数据库表中某个字段(值分行显示),可以用函数in(). 今天工作中遇到一个问题,就是用FIND_IN_SET()函数解决的. 第 ...

  8. mysql常用函数参考

    mysql常用函数参考   对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL, ...

  9. mysql字符串函数(转载)

    对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的 最左面字符的ASCII代码值.如果str是空字符串, 返回0.如果str是NULL,返回NULL. mysq ...

  10. 小白学习mysql之函数

    ## 导语 曾经我以为,学会了select.update.insert和delete之后,我就学会了数据库~,要不是到公司看到SQL里充满了密密麻麻的的各种函数,我差点就信了~,当初的自己是多么的天真 ...

随机推荐

  1. 如何基于IM即时通讯SDK从零开发仿微信聊天交友功能

    IM即时通讯技术的发展 IM即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务. 实时聊天交互功能是市面上主流APP的重要功能之一,人们所熟悉的就是微信,QQ的聊天消息 ...

  2. CF1311F Moving Points

    题目传送门 思路 给出一种不需要脑子的四颗树状数组解法. 这四颗树状数组分别为:一颗维护负数,一颗维护负数个数,一颗维护正数,一颗维护正数个数. 首先考虑没有速度该怎么求. 不妨先按 \(x_i\) ...

  3. 地理探测器简介(R语言)

    地理探测器 1. 地理探测器原理 空间分异性是地理现象的基本特点之一.地理探测器是探测和利用空间分异性的工具.地理探测器包括4个探测器. 分异及因子探测:探测Y的空间分异性:以及探测某因子X多大程度上 ...

  4. mysql常用命令汇总

    1.查询表占用空间语句:SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', table_rows AS 'Number of Row ...

  5. .NET6+WebApi+Vue 前后端分离后台管理系统(二)

    项目搭建: 这个项目使用的开发工具是:VSCode,工具的下载和安装这里就不赘述了,自行百度吧.使用的技术主要是: Vue3.Element Plus 等,Vue 项目的搭建这里也不赘述,如果不熟悉可 ...

  6. Vulnhub:katana靶机

    kali:192.168.111.111 靶机:192.168.111.194 信息收集 端口扫描 目录爆破发现80端口/ebook/database目录下的readme.txt.txt文件提示用户密 ...

  7. ant design vue datePicker 日期时间范围设置默认为当天0点-23点59

    <template> <a-card :bordered="false"> <a-range-picker show-time :default-va ...

  8. js正则匹配多行文本

    原文:https://lwebapp.com/zh/post/regular-expression-to-match-multiple-lines-of-text 需求 最近有小伙伴提了个需求,想用正 ...

  9. 深入理解 JVM -- 垃圾收集器与内存分配策略

    程序计数器.虚拟机栈.本地方法栈 3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作.每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行 ...

  10. SAP 开具发票的抬头文本带到会计凭证上

    #需求 将开具发票的抬头文本带到会计凭证上.方便财务处理凭证,不然需要再去编辑凭证,容易遗忘. 达到的效果如图所示: #二代增强SDVFX001 事务码cmod分配增强 编写增强出口 代码如下: DA ...