mysql中的字符定位截取

常用截取函数
length --计算字符串长度
concat --连接两个字符串
substring – 截取字符串
floor/ceil --…数学函数

select length('2340');
--->4
select length(2340);
--->4
select length('2019-09-01');
--->10
select length(2019-09-01);
--->4

select concat('1','1');
--->11
select concat(1,1);
--->11
select concat('2019-09-01','2019-09-02');
--->2019-09-012019-09-02
select concat(2019-09-02,2019-09-02);
--->20082008
select concat('a','a');
--->aa
select concat('a ','a');
--->a a

SELECT SUBSTRING('computer',3) AS col1, #第一个位置为1
SUBSTRING('computer',3,4) AS col2,
SUBSTRING('computer',-3) AS col3,
SUBSTRING('computer',-5,3) AS col4;

col1返回从第 3 个位置开始到字符串结尾的子字符串,结果为“mputer”
col2 返回从第 3 个位置开始长度为 4 的子字符串,结果为“mput”;
col3 返回从倒数第 3 个位置到字符串结尾的子字符串,结果为“ter”;
col4返回从倒数第 5 个位置开始长度为 3 的子字符串,结果为“put”。

select floor(100.1); #floor函数返回小于等于该值的最大整数.(向下取整)
--->100
select floor('100.1');
--->100
select floor(-100.1);
-->-101

select ceil(100.1);#向上取整
--->101
select ceil(-100.1);
--->-100

select round(15.4)#四舍五入

select round(15.5)#四舍五入

select left('2019-08-01 00:00:00',4); #第一个位置为1
-->2019
select mid('2019-08-01 00:00:00',6,2);
-->08
select right('2019-08-01 00:00:00',2);
-->00

substring_index(str,delim,count)
str:要处理的字符串
delim:分隔符
count:计数

str=www.wikibt.com

substring_index(str,'.',1)
--->www
substring_index(str,'.',2)
--->www.wikibt

也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容
相反,如果是负数,那么就是从右往左数,第N个分隔符右边的所有内容,如:

substring_index(str,'.',-2)
--->wikibt.com

有人会问,如果我要中间的的wikibt怎么办?

很简单的,两个方向:

从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:

substring_index(substring_index(str,'.',-2),'.',1);
1
SUBSTR(str,num)
select SUBSTR('www.wikibt.com',5)
--->wikibt.com

select SUBSTR('www.wikibt.com',-5)
--->t.com

num>0时,从左往右数第num个字符右边的
num<0时,从右往左数第num个字符右边的

INSTR(STR,SUBSTR)
STR 被搜索的字符串
SUBSTR 希望搜索的字符串
结论:在字符串STR里面,字符串SUBSTR出现的第一个位置(INDEX),INDEX是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。

--查询字符串存在的情况下:
SELECT INSTR("abcd",'b');
--->2

--查询字符串不存在的情况下:
SELECT INSTR("abcd",'f')
--->0

SUBSTR与INSTR
str=www23154
select substr(str,instr(str,'
')+1)
1
2
实战
title contents
【Java3y简单】 快乐学习
【Java3y简单】 快乐学习渣渣
【Java3y通俗易懂】 简单学
【Java3y通俗易懂】 简单学芭芭拉
【Java3y平易近人】 无聊学
【Java3y初学者】 枯燥学
【Java3y初学者】 枯燥学呱呱
【Java3y大数据】 欣慰学
【Java3y学习】 巴拉巴拉学
【Java3y学习】 巴拉巴拉学哈哈
【Java3y好】 雨女无瓜学
现在我统计出【】括号里边出现的频次,比如说:Java3y通俗易懂 出现的频次是多少。

select substring_index(left(title , INSTR(title , '】') -1 ) , '【',-1)
FROM xxx_table
1
2
求当前的小时
select now()

select mid(now(),12,2)

select SUBSTRING(now(),12,2)

select SUBSTRING_INDEX(now(),' ',-1)
select SUBSTRING_INDEX(SUBSTRING_INDEX(now(),' ',-1),':',1)

select SUBSTRING_INDEX(left(now(),instr(now(),':')-1),' ',-1)

猜你喜欢

转载自blog.51cto.com/14538264/2438836