重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
方法/步骤
湘东网站建设公司成都创新互联,湘东网站设计制作,有大型网站制作公司丰富经验。已为湘东上1000+提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的湘东做网站的公司定做!
首先,计算字符串的字符数,可以用char_length()函数,代码如下:
select 'zhangsan',char_length('zhangsan');
如下图所示:
字符串中的length()函数,用来计算字符串的长度,代码如下:
select 'zhangsan',length('zhangsan1111');
如下图所示:
字符串函数中有时需要将几个不同的字符串拼接在一起,这时可以利用concat(a1,a2,...)和concat_ws(b,b1,b2,...),可以将各字符串合并成一个字符串,代码如下:
select concat('zhang','san','feng');
select concat_ws('*','zhang','san','feng');
函数concat。distinct是mysql中去重最常用的方法,有自己的局限性。是统计的是每条数据重复的次数拼接函数concat个函数较简单的。多项式的次数是指次数最高的项的次数。单项式的次数是指单项式所有字母。
分别在 MySQL5.7.25-log 和 8.0.16 环境中实现类似Oracle的分析函数(8.0版本中已支持,直接使用即可)。
一、创建测试数据
二、row_number() over()
三、rank() over()
四、dense_rank() over()
五、lag() over()
六、lead() over()
七、待补充
例1:不分组,全部数据添加序列号,类Oracle 的rownum伪列
例2:先按roomid分组,再按照deviceid,counter排序,类Oracle 的row_number() OVER(PARTITION BY ORDER BY )
例1:不分组,全部数据按 roomid 排序,再添加序号,类Oracle 的rank() OVER(ORDER BY)
例2:先按roomid分组,再按deviceid排序,类Oracle 的rank() OVER(PARTITION BY ORDER BY)
例1:不分组,全部数据按roomid排序,再添加序号,类Oracle 的dense_rank() OVER(ORDER BY)
例2:先按roomid分组,再按deviceid排序,类Oracle 的dense_rank() OVER(PARTITION BY ORDER BY)
例1:不分组,全部数据按roomid,deviceid升序排序,类Oracle 的lag() OVER(ORDER BY)
例2:先按roomid分组,再按roomid,deviceid排序,类Oracle 的lag() OVER(PARTITION BY ORDER BY)
例1:不分组,全部数据按roomid,deviceid,counter升序排序,类Oracle 的lead() OVER(ORDER BY)
例2:先按roomid分组,再按deviceid,counter排序,类Oracle 的lead() OVER(PARTITION BY ORDER BY)
窗口函数(window functions),也叫分析函数和OLAP函数,MySQL在8.0之后开始支持窗口函数。窗口函数可以用来对数据进行实时分析处理,和group by有类似之处,其区别在于窗口会对每个分组之后的数据按行进行分别操作,而group by一般对分组之后的函数使用聚合函数汇总,做不到对不同的group中的行数据进行分别操作。这就简单介绍几种常见的MySQL窗口函数。下表中列出了几种常见的窗口函数,并对其基本功能进行了描述。接下来我们会以一段示例,来展示MySQL中窗口函数的用途和效果。
假设我们存在一张如下的员工工资表,接下来我们将以这张表对窗口函数的使用方法进行简单的演示。
窗口函数的语法如下,所有的窗口函数均遵循以下语法:
其中 frame_clause 语法如下。
接下来我们将展示一些场景的窗口函数的用法和效果。
示例: 对所有员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名
示例: 对每个部门的员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名
示例: 对所有员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名,最终结果按照员工号进行排序输出。
示例: 找出每个部门工资最高的人。
示例: a.将所有员工按照工资递增的顺序分成4组。b.根据员工入职日期升序分成7组。
示例: 获取每个部门,按工资从低到高得累计和。
示例: 获取每个部门得工资累计和。
示例: 获取整个公司的薪资按照薪资递增的累计和。
示例: 获取整个公司的薪资按照薪资递增的前两行和后一行范围内的薪资和。
示例: 每个部门的平均工资。
示例: 获取整个公司的薪资按照薪资递增的前两行和后一行范围内的薪资平均值。
示例: 根据薪资排序,获取CUME_DIST()和PERCENT_RANK()
示例: a. 获取每个人入职前一行的数据,默认值为"2021-01-01";b. 获取每个人入职前两行的数据,不设置默认值;c. 获取每个人入职后一行的数据,默认值为"2022-01-01";d. 获取每个人入职后两行的数据,不设置默认值;
示例: a. 按照入职日期顺序排序,找出当前每个部门最先入职的人的薪资。b. 按照入职日期顺序排序,找出当前每个部门最后入职的人的薪资。
示例: a.获取截至当前工资第二高的人的工资。b.获取第二个入职的人的工资。
1、value函数
用法:select value(id,'') from merchant ;
如果id为空,返回空,如果id不为空,返回id的值;
2、nvl函数
用法:select nvl(id,'') from merchant ;
如果id为空,返回空,如果id不为空,返回id的值;
3、substr函数
用法:select substr(src_ip,1,2) from tbl_sybvclear_txn;
从src_ip第一位开始,取两位;
4、length函数
用法:select length(src_ip) from tbl_sybvclear_txn;
计算字符串的长度,不必赘述;
5、ltrim函数,rtrim函数
用法:去掉左侧,右侧的空格;
6、letf函数,right函数
用法:select left(src_ip,3),right(src_ip,3) from tbl_sybvclear_txn;
取src_ip左边3个,右边3个字符串;
7、concat函数
用法:select concat(src_ip,chl_resp) from tbl_sybvclear_txn;
字符串连接,mysql支持三个以上参数,db2只支持两个参数;
8、replace函数
用法:select src_ip,replace(src_ip,'223','55') from tbl_sybvclear_txn;
把src_ip中223全部替换成55;
9、to_char函数,to_date函数,to_timestamp函数
用法:将数值型转成字符型
10、avg函数
用法:select avg(mcht_fee) from tbl_sybvclear_txn;
返回mcht_fee平均值;
11、count函数
用法:太常用,不赘述;
12、sum函数
用法:太常用,不赘述;
13、max函数,min函数
用法:取某列的最大值,最小值;