本章介绍什么是计算字段,如何创建计算字段,以及在应用程序中使用别名来引用计算字段。
举个简单的例子,如果想要在一个搜索结果中既显示公司的名称,又显示公司的地址。我们无法直接
SELECT name, adress FROM TABLE;
,因为这样显示的是两列搜索结果,有的计算字段就可以把两列搜索结果连接起来形成一个字段。
当列中存储的数据不是我们所直接需要的时候,我们就需要计算字段,来对数据进行转化,计算来得到我们想要的结果。
计算字段其实实质上也是一种列,只不过这个列是我们通过计算的到的。
拼接:将多个值联结起来形成一个值。
在我们的数据库中,有vendor的name和country,如果我们需要name(location)形式的输出。这是单个值,但表中的数据存储在两个列中:vend_name和vend_country,此外还需要()把数据括起来。但括号并没有存储在数据库中。
这个时候的解决办法就是把两个列拼接起来。可以使用Concat()函数拼接数据。
有的SQL语句是使用+或者||来实现拼接,但MySQL是使用Concat语句。
Concat函数的形参列表没有指定多少元素,可以对多个元素进行拼接。
在整理数据的时候如果我们想要删去两侧多余的空格,可以使用Trim()函数。
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') FROM vendors ORDER BY vend_name;
RTrim()函数是删去右边的所有空格,而LTrim()是删去左边的所有空格,Trim()是删去两侧的所有空格。
我们注意到,在上面的例子中,所显示出来的列的名字似乎就只是我们的计算字段,那如何对这个检索出来的结果起一个新的名称呢?
我们可以使用别名,别名的关键字是AS。
SELECT语句由原来的没有什么不同,但后面的文本AS表示创建了一个包含指定计算(这里是Concat函数)的名为vend_title的计算字段。
计算字段的另一用途是对检索出的数据进行算术计算。例如orders表包含所有的订单信息,orderitems包含每个订单的各项物品。
例如这个例子表示订单号为20005的各项物品。
现在要汇总单种物品的价格。
这个样例中新增了一列expanded_price,这个是通过quantity * item_price得到的。
MySQL中的算数计算包含常见的 +,-,*,/。
SQL中的函数一般是用来对数据进行处理与转换。例如上一节的Trim()函数。
大多数SQL中都有以下函数:
1.用于处理文本串的文本函数函数(如删除或添加指定值,转换值为大写或小写)。
2.用于在数值数据上进行算数运算的数值函数(如返回绝对值,进行代数运算)。
3.用于处理日期和时间值并从这些值中提取特定成分的日期和时间函数(如返回两个日期之差,检查日期是否有效)。
4.返回DBMS正使用的特殊信息的系统函数(如返回用户登陆信息,检查版本细节)。
系统函数一般不太会用到,接下来我们举几个例子来介绍一下前三个函数。
上一节已经看到过一个文本处理的函数,就是Trim()函数,还记得他的作用吗?
下面是另一个例子,使用Upper()函数。
在这个例子中,通过使用Upper()函数,将vend_name的文本数据转换为大写。
下表列出了某些常见的文本处理函数。
对于这些函数,不会一一的去讲解,因为这些函数可以通过MySQL命令行的help命令去了解,以left()为例。
如上,(MySQL不严格区分大小写),left()函数的具体用法是left(str, len),即参数为串和返回的字符个数。如果串为空(NULL),则返回空(NULL)。如SELECT left('foobarbar', 5);
则返回从左开始的5个字符,即fooba。通过help能够了解这些函数的用法。
若想知道串的Soundex值请查询:https://blog.csdn.net/m0_52319639/article/details/121527255?spm=1001.2014.3001.5501
更多的文本处理函数请查询 https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
日期和时间采用相应的数据类型和特殊的格式储存,但我们一般不使用这些格式,直只对日期和时间进行读取,统计和处理。
下表是常用的日期和时间处理函数。
同文本处理函数类似,通过help命令可以查看这些函数的使用方式。
接下来看个简单的例子。(下面的例子可以帮助复习WHERE的使用)
在表orders中有order_date的列,里面存储的是日期和时间。
这个例子查找日期为2005-09-01的列,但这样查找可靠吗?
通过查看列的属性我们可以知道order_date的数据类型是datetime,这是指其存储的数据是日期加时间。
这个是其中存储的数据。例子中的时间全都是00:00:00,但实际并不可能是这样,这个时候order_date = '2005-09-01’就可能有些问题,我们的目的是查找日期在这一天的的列,这个时候我们就可以使用Date()函数。
SELECT cust_id, order_num FROM orders WHERE Date(order_date) = '2005-09-01';
还有一个例子是检索所有2005年九月下的订单。因为条件实际上有两个,一是2005年,还有一个是9月,我们可以使用and子句,因为Year()返回年份,Month()返回月份,即:
这个例子就可以检索所有2005年九月的订单。
更多日期和时间函数请查询:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html
数值处理函数主要用于代数,统计数据。较为简单也易于理解。
下面是常用的数值处理函数。
更多的数值处理函数请查询: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html