SQL | 使用函数处理数据

8-使用函数处理数据

8.1-函数

SQL可以用函数来处理数据。函数一般是在数据上执行的,为数据的转换和处理提供了方便。

8.1.1 函数带来的问题

每种DBMS都有特定的函数,只有很少一部分函数,是被所有主要的DBMS等同的支持。

虽然所有的类型的函数一般都可以在每个DBMS中使用,但每个函数的名称和语法可能及其不同。

下面是三个常用的函数以及其在各个数据库中的语法:

可以看到,与SQL不一样,SQL函数是不可移植的。许多SQL程序员不赞成使用特定的函数实现特定的功能。虽然这么做有好处,但是有时候不利于应用的性能。

8.2-使用函数

大多数SQL都实现支持以下类型的函数。

  • 用于处理文本字符串(如删除、填充值,转换大小写)的函数。

  • 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。

  • 用于处理日期和时间,并从这些值中提取某些我们想要的成分(如返回两个日期之差,检查日期的有效性)的日期和时间函数。

  • 用于生成可读性比较好的格式化函数(如用语言形式表达出日期,用货币符号和千分位表示金额)。

  • 返回DBMS正使用的特殊信息(如返回用户登录信息)的系统函数。

8.2.1 文本处理函数

上述内容中有一个文本处理函数,RTRIM()用来去除某列值右边的空格。

这次我们使用UPPER() 将英文字符串全部转换为大写。

select vend_name,UPPER(vend_name) as vend_name_upcase
from vendors
order by vend_name;

 

由上述输出结果我们可以看到,左边列是原始数据,右边列是我们使用文本处理函数后得到的数据。

大写、小写、大小写混合

SQL函数不区分大小写,因此,upper()、UPPER()、Upper()三个函数是同一个作用。

substr()、SUBSTR()、Substr()也是同样的道理。

虽然不区分大小写,但是还是要有自己的风格,不要变来变去,使得编写的代码可读性较差。

常用的文本处理函数:

函数说明
left() (或使用子字符串函数)返回字符串左边的字符
lenfth() (也可以使用datalength() 或者 len())返回字符串的长度
lower()将字符串转换为小写
ltrim()去掉字符串左边的空格
rtrim()去掉字符串右边的空格
right() (或使用子字符串函数)返回字符串右边的字符
substr()或者substring()提取字符串的组成部分
soundex()返回字符串的soundex值
upper()将字符串转换为大写

soundex是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。soundex考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较。

虽然soundex不是SQL概念,但大多数DBMS都提供了对soundex的支持。

soundex支持 PostgreSQL不支持soundex(),因此以下的例子不适用于这个DBMS。另外,如果在创建SQLite时使用了SQLITE_SOUNDEX编译时选项,那么soundex()在SQLite中就可用。因为SQLITE_SOUNDEX不是默认的编译时选项,所以多数SQLite实现不支持soundex()。

例如:Customers表中有一个顾客Kids Place,其联系名为Michelle Green。但如果这是错误的输入,此联系名实际上应该是Michael Green,该怎么办呢?

如果按照正确的联系名搜索不会返回数据,如下所示:

select cust_name,cust_contact
from customers
where cust_contact = "Michael Green";

显然,输出的行为0。

如果使用soundex()函数进行搜索,他匹配所有发音类似于Michael Green的联系名。

select cust_name,cust_contact
from customers
where soundex(cust_contact) = soundex('Michael Green');

WHERE子句使用SOUNDEX()函数把cust_contact列值和搜索字符串转换为它们的SOUNDEX值。因为Michael Green和Michelle Green发音相似,所以它们的SOUNDEX值匹配,因此WHERE子句正确地过滤出了所需的数据。

8.2.2 日期和时间处理函数

日期和时间值以特殊格式存储,以便能快速有效的排序或者过滤,并且节省物理存储空间。

应用程序一般不使用日期和时间的存储格式,因此日期和时间函数总是用来读取、统计和处理这些值。由于这个原因,日期和时间函数在SQL中具有重要的作用。但是每个DBMS几乎都不一样。

例子:Orders表中包含的订单都带有订单日期。要检索出某年的所有订单,需要按订单日期去找,但不需要完整日期,只要年份即可。

在SQL Server中检索2020年所有订单

select order_num
from orders
where datepart(yy,order_date) = 2020;

在本机的MySQL环境下执行上述语句,会出现:ERROR 1305 (42000): FUNCTION databases.datepart does not exist

提示我们该函数不存在。

DB2,MySQL和MariaDB具有各种日期处理函数,但没有DATEPART()。DB2,MySQL和MariaDB用户可使用名为YEAR()的函数从日期中提取年份:

select order_num
from orders
where year(order_date) = 2020;

在SQLite中有一个小技巧:

select order_num
from orders
where strftime('%Y',order_date) = '2020';

上述SQL语句用来提取和使用日期的年。按月份过滤,可以进行相同的处理。

DBMS提供的功能远不止简单的日期成分提取。大多数DBMS具有比较日期、执行日期的运算、选择日期格式等的函数。但是,可以看到,不同DBMS的日期−时间处理函数可能不同。

8.2.3 数值处理函数

数值处理函数,主要用来处理数值数据,这些函数主要用来处理代数、三角和几何,所以,一般情况下,数值处理函数不像日期和时间处理函数使用那么频繁。

但是,数值处理函数是各个DBMS最统一的函数。

练习

  1. 我们的商店已经上线了,正在创建顾客账户。所有用户都需要登录名,默认登录名是其名称和所在城市的组合。编写SQL语句,返回顾客ID(cust_id)、顾客名称(cust_name)和登录名(user_login),其中登录名全部为大写字母,并由顾客联系人的前两个字符(cust_contact)和其所在城市的前三个字符(cust_city)组成。例如,我的登录名是BEOAK(Ben Forta,居住在Oak Park)。提示:需要使用函数、拼接和别名。

    select cust_id,cust_name,
            upper(Concat(substring(cust_contact,1,2),substring(cust_city,1,3))) as user_login
    from customers;

     

  2. 编写SQL语句,返回2020年1月的所有订单的订单号(order_num)和订单日期(order_date),并按订单日期排序。你应该能够根据目前已学的知识来解决此问题,但也可以开卷查阅DBMS文档。

    select order_num,order_date
    from orders
    order by order_date;

    我见青山多妩媚,料青山间我应如是。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/73716.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLO相关原理(文件结构、视频检测等)

超参数进化(hyperparameter evolution) 超参数进化是一种使用了genetic algorithm(GA)遗传算法进行超参数优化的一种方法。 YOLOv5的文件结构 images文件夹内的文件和labels中的文件存在一一对应关系 激活函数:非线性处理单元 activation f…

使用Python和pyodbc库将文件信息插入Access数据库

将文件信息插入 Access 数据库的博客文章示例: 简介: 在日常编程工作中,我们经常需要处理文件和文件夹。有时,我们需要遍历文件夹中的所有文件,并将文件的路径、类型、文件名以及修改日期和创建日期等信息保存到数据库…

Ajax 笔记(一)—— Ajax 入门

笔记目录 1. Ajax 入门1.1 Ajax 概念1.2 axios 使用1.2.1 URL1.2.2 URL 查询参数1.2.3 小案例-查询地区列表1.2.4 常用请求方法和数据提交1.2.5 错误处理 1.3 HTTP 协议1.3.1 请求报文1.3.2 响应报文 1.4 接口文档1.5 案例1.5.1 用户登录(主要业务)1.5.2…

会玩这 10 个 Linux 命令,一定是个有趣的 IT 男!

Linux当中有很多比较有趣的命令,可以动手看看,很简单的。 1.rev命令 一行接一行地颠倒所输入的字符串。 运行: $rev如输入:shiyanlou shiyanlou2.asciiview命令 1.先安装aview $sudo apt-get install aview2.再安装imagema…

react中使用路由起手式,一些思路和细节。

一.安装并配置 我们选择使用react-router实现路由效果 yarn add react-router-dom下载后需要对Route进行引入,是个内置的组件。该组件是有两个属性一个是path,一个是component,path是组件对应的路由,component是对应的组件 二.…

蓝帽杯 取证2022

网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php(CodeI…

php如何对接伪原创api

在了解伪原创api的各种应用形态之后,我们继续探讨智能写作背后的核心技术。需要说明的是,智能写作和自然语言生成、自然语言理解、知识图谱、多模算法等各类人工智能算法都有紧密的关联,在百度的智能写作实践中,常根据实际需求将多…

C++11时间日期库chrono的使用

chrono是C11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration, time_point, clock。 时钟与时间点 chrono中用time_point模板类表示时间点,其支持基本算术操作;不同时钟clock分别返回其对应…

Jmeter-压测时接口按照顺序执行-临界部分控制器

文章目录 临界部分控制器存在问题 临界部分控制器 在进行压力测试时,需要按照顺序进行压测,比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的,如果请求次数少,可能会按照顺序执行,但是随着次数增加&a…

XML 数据传输格式

目录 XML简介 一、初识XML 1.什么是 XML? 2.XML 和 HTML 之间的差异 3.XML 不会做任何事情 4.通过 XML 您可以发明自己的标签 5.XML 不是对 HTML 的替代 二、XML 用途 1.XML 把数据从 HTML 分离 2.XML 简化数据共享 3.XML 简化数据传输 三、XML 树结构 1.一个 XML 文…

大语言模型:LLM的概念是个啥?

一、说明 大语言模型(维基:LLM- large language model)是以大尺寸为特征的语言模型。它们的规模是由人工智能加速器实现的,人工智能加速器能够处理大量文本数据,这些数据大部分是从互联网上抓取的。 [1]所构建的人工神…

Word(1):文章页码设置

1.需求 在文档的封皮页不设置页码,在目录页页码设置为罗马数字,在正文使用阿拉伯数字。 2.解决方法 step1: 在封皮页的最后,点击”插入“-分隔符-分节符(下一页) step2:在目录页的最后&…

Amazon EMR Hudi 性能调优——Clustering

随着数据体量的日益增长,人们对 Hudi 的查询性能也提出更多要求,除了 Parquet 存储格式本来的性能优势之外,还希望 Hudi 能够提供更多的性能优化的技术途径,尤其当对 Hudi 表进行高并发的写入,产生了大量的小文件之后&…

【C/C++】STL queue 非线程安全接口,危险!

STL 中的 queue 是非线程安全的,一个组合操作:front(); pop() 先读取队首元素然后删除队首元素,若是有多个线程执行这个组合操作的话,可能会发生执行序列交替执行,导致一些意想不到的行为。因此需要重新设计线程安全的…

U盘安装CentOS7系统出现dracut timeout的解决办法

文章目录 业务场景操作步骤U盘装CentOS7系统确定U盘盘符修改启动命令系统配置 总结 业务场景 我们在某市实施交通信控平台项目,我们申请了一台服务器,用于平台安装由于机房机器只有内网,不连互联网,我们无法安装所需要的软件&…

考公-判断推理-逻辑判断

且和或 只能有一个人是我老婆,要么小红,要么小丽,不可能都是我老婆,虽然有些人心里是这么想的 虽然,但是,且 虽然我很丑,但是我很温柔 或的翻译,否一推一 例题 例题 德摩根 例题…

EndNote 21 for Mac(文献管理软件) v21.0.1中文版

EndNoter mac是一款参考文献管理软件,旨在帮助学术研究者、学生和专业人士有效地管理和引用参考文献。该软件提供了许多功能,使用户可以轻松地组织、搜索和引用各种类型的文献。 EndNoter mac软件特点和功能 1. 参考文献管理:EndNoter允许用…

精挑细选的几个宝藏软件

是不是感觉你的电脑里面永远都缺少一款软件?每次想要使用某个功能的时候总是不能找到合适的,还要先去网上找,小编给大家分享几款超级实用的软件,建议低调收藏哦~ Proxyee-down/下载工具 proxyee-down是一款免费开源的http下载工…

Nginx之lnmp架构

目录 一.什么是LNMP二.LNMP环境搭建1.Nginx的搭建2.安装php3.安装数据库4.测试Nginx与PHP的连接5.测试PHP连接数据库 一.什么是LNMP LNMP是一套技术的组合,Llinux,Nnginx,Mmysql,Pphp 首先Nginx服务是不能处理动态资源请求&…