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. PHP的25种框架

    本篇文章给大家分享的内容是25种PHP框架 -有着一定的参考价值,有需要的朋友可以参考一下. 世界流行框架汇总 在项目开发中,一些架构和代码都是重复的,为了避免重复劳动,于是各种各样的框架诞生了. 在 ...

  2. Shell命令-常用操作

    Shell基础 1 Shell命令的基本格式 基本格式 command [选项] [参数] []表示可选的,也就是可有可无.有些命令不写选项和参数也能执行,有些命令在必要的时候可以附带选项和参数. 短 ...

  3. 通过反射机制简化 JDBC ResultSet 实体类的注入

    提出问题 查询完某个表之后,一般都是把结果的每一个字段注入到一个实体类中.比如,数据库 users 表,查询出来的结果注入到 User 实体类中. 通过 while 遍历 ResultSet,把字段对 ...

  4. Canvas:绘制失败的问题

    beginPath 绘制路径必须添加 beginPath().它标志着一个画笔在画布中哪个地方开始画起.没有它,新起的画笔位置必定与上一次画笔结束的位置相连. // 第一个半圆 ctx.arc(60, ...

  5. 创建微信小程序组件的步骤

    创建组件 新建目录 一个组件由四部分组成,js.json.wxml.wxss,组件其实就是页面中被拆分出来的,可以在多个页面中共同使用的小块 UI,所以看起来和新建一个页面的四个文件一样: 引入组件 ...

  6. K8S 1.20 弃用 Docker 评估之 Docker 和 OCI 镜像格式的差别

    背景 2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时. 弃用 Docker 带来的 ...

  7. crypto-gmsm国密算法库

    crypto-gmsm国密算法库 一.开发背景 crypto-gmsm国密算法库是国密商密算法(SM2,SM3,SM4)工具类封装,国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主 ...

  8. Mysql习题系列(二):多表查询(一篇学会做Mysql多表查询题,超详细~)

    Mysql8.0习题系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 文章目录 Mysql8.0习题系列 1.多表查询1 1.1题目 1.2答案 1.显示所有员工的姓名,部门号和部 ...

  9. CentOS 7 yum安装MongoDB

    1.配置MongoDB的yum源 cd /etc/yum.repos.d vim mongodb-org-6.0.repo 2.添加下载配置文件(这里使用阿里云的源),保存退出 [mngodb-org ...

  10. Cinder 对接本地LVM存储

    系统安装lvm2 yum install lvm2 1.创建 loop 设备 dd if=/dev/zero of=volume_test bs=51200 count=1M 2.挂载loop设备 l ...