玖叶教程网

前端编程开发入门

如何用 SQL 找一个女朋友?(如何用 sql 找一个女朋友的信息)

背景

作为一个sql boy,笔者认为写sql真的是很枯燥而且很简单的事情,但没想到身边的朋友竟然会写不出sql来,因此笔者突发灵感编写此文来梳理一下如何写sql,以及怎么样写好sql。

那么开头就以笔者今天做的一个需求为例吧,上班第一天,业务方提出了一个取数需求,要求获取指定条件的用户,且用户姓名要进行掩码处理。例如:

姓名为:“李四”,那么要输出"李*";

姓名为:“古力古丽”,那么要输出“古***”;

即只需要保留第一个字符,剩下的字符要用*替代。

刚一开始觉得这个蛮简单的,不就是一个sql的事情吗,正好玩了好几天可以缓解一下假期综合症。说来就开始搞呀。

梳理

看到这个需求的时候,我大概知道要实现这么一个功能,需要替换(regexp_replace)、截取(substr)函数,那么接着梳理一下:

先要获取第一个字符,即需要截取

然后要获取剩余字符并替换为*

看,不就是那么简单嘛,那么接下来随便整点测试数据验证一下思路是否正确。

1-- 1.首先获取第一个字符
2select substr('你好',0,1)
3
4-- 2.获取剩余字符长度,并替换*,这里需要先获取剩余字符
5select substr('你好',2) --思考?这里为什么要从下标2开始呢?而不是从1开始?
6
7-- 3.这里要进行替换(那就要使用regexp_replace函数实现了),注意:这里有个坑
8select regexp_replace(substr('你好',2),'(.*)','*')  

what?为什么会有两个字符呢?完蛋,看样子是中文字符占用字节数的问题,那么就不能用正则替换这条路了,那接下来怎么搞?

曲线救国

刚才看到使用正则替换不能实现该需求,那怎么办?唉,先喝口茶吧,突然想到了python有一个可以生成重复字符的功能,即print("*"*5)。那sql是不是也可以实现呢?管他呢,先试试。

第一步仍然是要先获取第一个字符

那么接下来就要获取剩余字符的长度,这样不就可以通过重复生成指定长度的字符完成了嘛

那么问题又来了,hql有可以生成重复的函数吗?先搜搜看

果然眼神好的我,发现了repeat这个函数,那么我们就来试试吧

1-- 1.首先获取第一个字符
2select substr('你好',0,1)
3
4-- 2.先测试下repeat这个函数好不好使
5select length(substr('你好',2)) --果然好使
6
7-- 3.那么接下来拼接一下吧,其实后来发现不需要获取剩余字符的长度,我只需要获取完全字符长度再-1即可。因为需求只需要保留一个字符
8select repeat('*',length('你好')-1)

赶紧结束这个需求吧

既然整个步骤拆解都已经测试ok了,那么我们把sql拼接一下吧

首先获取第一个字符

将剩余字符生成对应长度的替代字符

将1和2步进行拼接

1select concat(substr('你好',0,1),repeat('*',length('你好')-1))
2select concat(substr('古力古丽',0,1),repeat('*',length('古力古丽')-1))

最后说两句

笔者这里给出的需求虽然很简单,而且不复杂,如果读者有更好的思路可以一起讨论下,但对于所有的sql需求来说,其实整体步骤都是一样的。即

首先要分析需求,先要有一个解决思路,可以不先写sql,

然后根据自己的思路去进行拆解,然后每一步都用sql来实现

把所有拆解的步骤拼装在一起

最后是对这个sql的优化了

笔者这里说起来比较简单,但对于没有写过sql的同学来说还是比较难的,正如我们刷算法题,对于大部分程序员来说是一件比较痛苦的事情,一开始真的很难,其实难的是没有思路,不知道如何下手。但熟练了之后,相信又是另一种心态了。


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言