SQL Cookbook:使用字符串

Posted 一个后端狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Cookbook:使用字符串相关的知识,希望对你有一定的参考价值。

1、遍历字符串

SQL中不提供迭代操作,所以要连接一张用来作为遍历指针的表,来实现这个过程

1 select substr(e.ename, iter.pos, 1) as C
2     from (select ename from emp where ename = \'KING\') e,
3          (select id as pos from t10) iter
4     where iter.pos <= length(e.ename);

t10中有十条数据,id从1-10。

from子句提供了笛卡尔积,结果表类似于下图

where子句限制pos范围。

另一个例子:

1 select substr(f.title, iter.pos) as C, 
2        substr(f.title, length(f.title) -iter.pos + 1) as D 
3 from (select title from film where film_id = 1) f, 
4      (select id as pos from t10) iter 
5 where iter.pos <= length(f.title); 

 

2、字符串中的单引号

需要用两个单引号转义。

1 select \'t\'\'1\' from t10;

 

3、计算字符在字符串中出现的次数

首先计算出原串长度,计算出然后把目标字符替换掉的字符串的长度,最后做差。

1 select length(f.title) - length(replace(f.title, \'A\', \'\')) as cnt 
2 from film f 
3 where f.film_id = 1;

多个字符时,要除一下目标串的长度:

1 select length(f.title) - length(replace(f.title, \'A\', \'\'))/length(\'A\') as cnt 
2 from film f 
3 where f.film_id = 1;

 

4、判断字符串是不是字母数字型的

1 select title
2 from film 
3 where title regexp \'[^0-9a-zA-Z[:blank:]]\' = 0;

整个表达式的意思是,返回“除数字、空格和字母外,还有其他字符”这一条件为假的行。

 

5、按字符串中的部分内容排序

1 select title 
2 from film 
3 where film_id <= 50 
4 order by substr(title, 5);

 

6、组内字符串连接

使用group_concat

1 select substr(title, 1, 1) as word, 
2        group_concat(title, \'|\') as titles 
3 from film 
4 group by substr(title, 1, 1)\\G

 

7、按字母顺序排列字符串

先将title拆成单个字母,然后使用原标题group起来,接着排序,最后使用group_concat连接字符串

1 select title, 
2     group_concat(c order by c separator \'\') as new_title 
3 from (
4   select title, substr(a.title, iter.pos, 1) c 
5   from film a, 
6      (select id as pos from t10) iter 
7   where iter.pos <= length(a.title)
8 ) x 
9 group by title;

 

8、分解IP地址

将127.0.0.1按.分解

select substring_index(substring_index(y.ip, \'.\', 1), \'.\', -1) a, 
       substring_index(substring_index(y.ip, \'.\', 2), \'.\', -1) b, 
       substring_index(substring_index(y.ip, \'.\', 3), \'.\', -1) c, 
       substring_index(substring_index(y.ip, \'.\', 4), \'.\', -1) d 
from (select \'127.0.0.1\' as ip from t10 limit 1) y;

 

以上是关于SQL Cookbook:使用字符串的主要内容,如果未能解决你的问题,请参考以下文章

Unity Shaders and Effects Cookbook (7-1) 在Surface Shader 中 访问 顶点颜色

SQL Cookbook:检索记录

SQL Cookbook:插入更新和删除

《SQL Cookbook》 - 第一章 检索数据

Microsoft.SQL.Server2012.Performance.Tuning.Cookbook学习笔记

Microsoft.SQL.Server2012.Performance.Tuning.Cookbook学习笔记