数据处理相关函数

       我们查询数据的时候,有时单纯的查询并不能得到我们想要的数据形式,此时需要我们对数据进行处理,在这个时候函数就登场,SQL中有一些内置的函数,如果能都记住,那是最好的。如果记不住的话,也尽可能地把所有的函数都看一遍,保证有印象,在遇到问题的时候,知道有函数可以解决这个问题,然后是上网去搜索,下次你在遇到类似的问题,就知道用那个函数了。学习过程中,遇到问题首先一定要先自己上网搜、上网搜索、上网搜索(这个很重要,不要直接去问别人)。sql 的函数和excel 的函数有很多类似的,如果你非常熟悉excel 函数,那么sql的函数学起来会很轻松,反之亦然

我将函数大致分了三类:

1.文本处理函数

2.日期和时间处理函数

3.数值处理函数


1.文本处理函数

        在提取文本数据时,我们有时会需要先对文本就行处理,比如提取某些特定的字符,删除多余的空格等等,这个时候我们可以使用文本处理相关的函数。

我这里举一个简单的例子,分享一下我的思路,方法不唯一,希望能起个抛砖引玉的作用。

英文单词在录入数据库时可能格式不统一 ,因此我在提取数据的时候,需要对其进行处理,  例如('apple','bananA ','   MELON ')变为('Apple','Banana','Melon')这样首字母大写的格式。

原始数据:('apple','bananA ','   MELON ') ,目标数据:('Apple','Banana','Melon') ,首先比较一下原始数据与目标数据的区别,如果消除这个区别就会得到目标数据,因此消除区别是解决问题的关键,在这个例子中,主要有两个区别:1.首字母大写,其他字母小写;2.前后无空格。

找到区别后,需要寻找解决方法(即相关函数),首先考虑是否有可以直接解决问题的函数,如果有则列出函数;如果没有,则分解问题,寻找可以直接用的函数,循环这个过程,直到所有分解的问题都找到对应的函数。

下面是我分析问题的一个思路流程

找到所有函数后,将函数组合起来,变成一个复合函数,利用这个复合函数,就可实现目标了。

假设对name字段进行处理,首先使用trim(name)删除多余空格;然后用left(trim(name),1) 提取首字母,之后使用upper(left(trim(name),1) )将首字母大写;我可以用 lower (trim(name))将所有字母变成小写,之后用substring( lower (trim(name)) ,2) 提取首字母之外的字母;最后再用concat(upper(left(trim(name),1) ) ,substring(  lower (trim(name)) ,2) )将其拼接起来,就得到了将首字母大写的函数了。以上是我想到的一个思路,方法不唯一,比如说我可以用right()/mid()和length()函数代替substring()函数提取剩余字母。这里就不扩展了,有兴趣的同学可以自己想一下。

以上是我解决这个问题的一个思路,逐步拆解问题,寻找解决方法,最终汇总在一起。这个方法帮我们将一个复杂的问题,拆解成多个可以入手解决的小问题,让我们快速地找到解决问题的思路。

以下是常用到的一些处理文本相关的函数(不限这些)

常用的文本处理函数

2.日期和时间处理函数

在创建数据表的时候,需要定义字段的数据类型,不同的数据类型决定了数据储存格式。

时间日期类型(来源菜鸟教程)

以上的这些数据类型是数据表中常见的时间日期储存格式,但是这些格式有时并不能满足我们的需求,例如我需要:年-月,或者月-日-星期等格式,计算时间差,日期差等,这种情况下需要使用时间和日期相关的函数。

规定日期格式时可以用 DATE_FORMAT( )函数,例如年-月:YYYY-MM这种格式:    DATE_FORMAT(NOW(),'%Y-%m')   其中:%Y:年,4 位  %m:月,数值(00-12),可以在网上查询格式类型 ,例如菜鸟教程

mysql 时间与日期的加减,不能直接用+、-符号直接计算,需要使用相应的函数。

为日期增加一个时间间隔:date_add(),date_add(now(), interval 1 day) 增加一天,如果需要增加1小时可以用hour 替换 day即可,年、月、分、秒的类似。

这里就不做详细的扩展了,有一点我要强调的是注意时区,虽然我们生活在中国,但是不代表数据库中的时间是以北京时间录入的。

常用日期与时间处理的函数

3.数值处理函数

在提取数据的时候,有时需要对数值型的数据进行计算,简单的+、- 、*、/等运算符无法满足我们运算时,我们可以使用数值处理的相关函数来进行计算。其中许多函数需要和group by结合使用。

我以这个表格为例子

成绩表 stu_core

在对成绩进行求和,首先想到是加法,其次是函数。如果不使用函数只用+是可以实现的,但是很麻烦。以下是我想到的一个方法(不唯一)。

以A、B的 成绩相加为例子

select distinct 'A+B' as '求和项', (select score from stu_core where name = 'A' ) + (select score from stu_core where name = 'B' ) as '求和结果' from stu_core;

非函数运算

可以看出直接用+ 号运算起来很麻烦,如果使用sum(),可以得到一样的结果,而且代码很简洁。

select 'A+B' as '求和项', sum(score) as '求和结果' from stu_core where name in ('A','B');

函数运算

因此在对数值型数据处理时,优先考虑是否有相关的函数。其中group by 经常会与数值型数据函数结合使用,group by可以理解为分组计算,例如我需要知道每个年龄段的平均成绩。不用group by的话,可能会分别去计算每个年龄段的成绩,然后用 union 进行汇总查询,这里简单的说一下这个方法的思路,有兴趣的同学可以回去试一下。我主要想说一下group by,可以看一下面的分组结构图。

分组结构

group by会将具有相同年龄的数据分到一组,让后执行计算,我需要的是平均值,所以选用avg()函数。

select age,avg(score) from stu_core group by age;

分组平均值的结果

group by分组计算一步到位,其中我认为分组计算时,最重要的是:要非常清楚按照什么分组,以什么分组,如果想明白了这点,分组计算将变得非常简单

以上只是我的一些思路,函数有很多,大家可以多去了解一下,下面是一些常用的数值型函数。

常用数值处理函数

       虽然标题取名为数据处理相关函数,但是全文下来并没有介绍太多的函数,我只分享了一下我的思路,我认为与其介绍很多函数的含义,不如分享一下我看到问题后寻找相关函数的思路,函数太多了,不太可能记住所有的函数的用法,主要会分解问题,然后在网上搜索即可找到相关的函数。(授之以鱼不如授之以渔)

如果文中哪里介绍的不对,烦请及时指出,让我学习学习。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,811评论 0 11
  • 花了3天时间学习MySql,考了个二级MySql 书籍参考:高等教育出版社《全国计算机等级考试二级教程-MySQL...
    如果仲有听日阅读 1,277评论 4 4
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,454评论 0 13
  • 1、SQL简介 SQL:Structured Query Language的缩写(结构化查询语言)是一种定义、操作...
    仕明同学阅读 2,127评论 1 23
  • 城市的夜晚霓虹灯璀璨 点亮了黑暗赶不走孤单 午夜和白天不停的交换 游走在街头一个人孤单 节日的狂欢情人的浪漫 所有...
    占着书坑不读书阅读 440评论 0 1