SQL函数

函数呢,主要讲四个方面的函数:数学函数、字符串函数、日期函数、窗口函数和其他常用函数。

数字函数

对于数字型的变量的函数主要包括加、减、乘、除、幂、四舍五入(round)、取余以及聚合函数中的min、max、sum、count等函数。其中的min、max、sum、count等函数,在聚合函数中已经介绍了,这里也就不再重复说了。但是需要注意的一点是,这些聚合函数可不仅仅适用于group by。举个例子,在某些场景下会把负数转为0,这种情况下就可以借助max函数,使用max(变量,0)就可以实现将负数转换成0。
在这里补充一个count函数的使用。count还有一个最常用的功能就是查询数据表有多少行,在计数行数时有三种方式,分别是count(1),count(*),count(col_name),三者都可以实现对数据表行数的记录,区别在于对空值的处理不同。其中count(1)和count(*)是对全部的行进行计数,包含空值;count(col_name)是对某一列的数据进行计数统计,而且不包含空值的计数。

字符串相关函数

字符串相关函数在数据分析师日常工作中使用比较少,因为数据分析师使用的通常是已经加工好的数据,而字符串相关的函数本质是在加工数据。字符串相关函数可以分成两个维度,一个是对字符串进行描述,二是对字符串进行操作。对字符串进行描述,包括计算字符串长度和判断字符串中是否包含某个字符;对字符串操作主要是字符串的截取、拼接、替换。

  • len()函数:计算字符串的长度,如select len("abc"),其返回的结果就是3,代表这个字符串的长度为3。

  • like函数:其实是字符串的匹配,即判断某个字符串中是否包含特定的模式,如“张三” like “张%”,就是通过匹配来判断是否包含。这里面%是通配符,表示任意一个或多个字符。除like函数外,rlike函数也可以实现相似字符串的筛选,区别在于like依赖通配符进行匹配,而rlike则可以使用正则表达式进行匹配,正则表达式的可以实现更丰富的功能。在SQL教程就不展开探讨正则表达式的内容,关于正则表达式的内容可参考https://www.runoob.com/regexp/regexp-syntax.html:

    select "张三" like "张%"
  • 字符串的截取常用的函数有:left、right和substr函数。left函数是从字符串左侧开始截取n个字符,所以其函数形式是left(字段名,n),其中n代表截取n个字符,right函数相同,不过是从右侧开始截取。substr函数,则是可以从任意位置开始截取,其变量包含了三个,也就是从字符串的哪个位置开始截取多少个字符,所以其函数形式为substr(str,i,n),str是字段名称,i表示开始截取的位置,n表示截取多少个字符。

    select left("Structure Query Language",9)
    --上面函数表示查询"Structure Query Language"从第1个字符开始,查询到第9个字符,也就是"Structure",注意,空格也算一个字符
    select right("Structure Query Language",8)
    --表示从右侧开始往左,查询8个字符,也就是"Language"
    select substr("Structure Query Language",11,5)
    --表示从第11位开始查询,查询5个字符,由于空格占一个字符,所以查询结果是"Query"

    实际应用中可以选择切合需要的函数处理即可。

  • concat函数:字符串的拼接,函数形式也比较简单,是concat(str1,str2,…,strn)表示将n个字符串进行拼接,如果需要分隔符怎么办?很简单,把分隔符作为str放入函数即可。

    select concat("Structure","Query","Language")
    --上面查询出的结果是"StructureQueryLanguage",会发现真的是拼在一起了,中间并没有分隔符,如果想添加分隔符,有两种方法,一是在字符串中就添加,二是添加新的字符串。
    
    --第一种方法
    select concat("Structure"," Query"," Language")
    --第二种方法
    select concat("Structure"," ","Query"," ","Language")
    --上述两种方法查询出来的结果都是"Structure Query Language",会添加相应的空格

    使用两种方法实现添加空格的方法在少量字符串的情况下是可行的,但是在有着大量字符串的情况下就很麻烦,所以可以使用concat同族函数concat_ws(分隔符,str1,str2,……)

    select concat_ws(" ","Structure","Query","Language")
  • 字符串的替换:replace函数,函数形式为replace(str,"被替换的内容","替换后的内容"),几乎用不到的函数。

    select replace("Structure Query Language"," ","-")
    --上面函数查询的意思是说把字符串"Structure Query Language"中的空格替换为"-",所以查询结果是"Structure-Query-Language"

    replace函数几乎用不到,知道存在替换函数就可以。

  • split函数
    Split函数是把字符串按照分隔符分割开来,其基本用法是

    select split(字符串,分隔符)

    可以实现把字符串按照分隔符进行拆分,拆分后是一组数据,可以选择这组数据中的某一项
    select split("AB-CD","-")[0]
    表示把字符串"AB-CD"按照"-"分割开来,生成["AB","CD"],又因为使用了[0],也就是选择第一项,所以最终的返回结果是"AB"
    由于mysql或者sql server中都没有内置的split函数,在网页工具中无法演示。

字符串相关的函数使用特别少,所以对上述函数有一定了解即可,具体的函数名称与使用的SQL版本相关,到时候具体百度相关函数和具体的操作即可。

日期相关函数

日期相关函数主要是两类:日期的拆分、时间间隔的计算和日期的移动。

  • 日期的拆分很容易理解,就是获取相应日期的年月日,所使用的函数就是year、month和day,函数的变量也就是日期格式的字段名称

    select
        year('2020-08-12'),
        month('2020-08-12'),
        day('2020-08-12')
    --上面的函数,就是提取相应的日期变量中的年月日,查询结果是2020,08,12
  • 时间间隔的计算,在MySQL中有两个函数:datediff和TimeStampDiff。datediff是计算两个日期之间的间隔天数,无法计算其他维度的间隔时长,TimeStampDiff使用更灵活,可以计算间隔天数、月数等。而且两个函数的变量位置也不同。datediff(enddate,startdate),是结束的日期在前,而在TimeStampDiff(datepart,start_date,end_date),datepart就是以什么单位度量这段时间间隔,常用的有day、month、year等。

    select TimeStampDiff(day,'2020-07-01','2020-08-01')
    --上面的函数就是计算两个日期的间隔天数,计算结果是31,即两个日期之间间隔31天
    select TimeStampDiff(month,'2020-07-31','2020-08-01'),
    TimeStampDiff(mont

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

数据分析入门技术篇

全部评论

相关推荐

迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
03-25 16:22
南华大学 Java
不敢追175女神:你是打了上千个招呼吧?😂
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务