计算字段的作用

储存在表中的数据一般都不是应用程序所需要(例如如果想要在一个字段中既显示公司名,又显示显示公司地址,但这两个信息一般包含在不同的表列中),我们需要从数据库中检索出转换、计算或格式化后的数据应用到应用程序中。而不是检索出数据,然后在应用程序或报告程序中重新格式化。计算字段并不实际存在于数据库表中,计算字段是在运行SELECT语句内创建的

字段

基本上与列的意思相同,经常互换使用。不过数据库列一般称为列,而术语字段通常用在计算字段的连接上

注:
1、只有数据库知道SELECT语句中哪些列是实际的列,哪些列是计算字段。从客户机(应用程序)的角度来看,计算字段的数据是以与其他列法数据相同的方式返回的

2、可在SQL语句内完成的许多转换和格式化工作都可以在客户机应用程序上完成。但一般来说,在数据库服务器上完成这些操作比在客户机上完成要快得多

 

拼接字段

在mysql的SELECT语句中,可以使用Concat()函数来拼接两个列(拼接姐若干个列名)

例1:

mysql> SELECT CONCAT (roleName,"(",level,")") FROM roleinfo ORDER BY level;
+---------------------------------+
| CONCAT (roleName,"(",level,")") |
+---------------------------------+
| Sbm_100(101)                    |
| Sam_100(107)                    |
| 枫落(201)                       |
+---------------------------------+

例1_1:

mysql> SELECT CONCAT ("角色名:",roleName,"_" ,"等级:",LEVEL) FROM roleinfo ORDER BY LEVEL;
+------------------------------------------------+
| CONCAT ("角色名:",roleName,"_" ,"等级:",LEVEL) |
+------------------------------------------------+
| 角色名:Sbm_100_等级:101                        |
| 角色名:Sam_100_等级:107                        |
| 角色名:枫落_等级:201                           |
+------------------------------------------------+

注:
1、mysql的不同之处:多数DBMS使用 + 或 || 来实现拼接,mysql使用Concat()函数来实现
2、concat()函数需要一个或多个指定的串,各个串之间用逗号" , "分隔

删除数据中的空格

函数名

描述

RTrim() 

删除值右边空格

LTrim() 

删除值左边空格

Trim() 

 删除值两边边空格

例2:

mysql> SELECT CONCAT ("角色名:",roleName,"_" ,"等级:",RTrim(level)) FROM roleinfo ORDER BY level;
+-------------------------------------------------------+
| CONCAT ("角色名:",roleName,"_" ,"等级:",RTrim(level)) |
+-------------------------------------------------------+
| 角色名:Sbm_100_等级:101                               |
| 角色名:Sam_100_等级:107                               |
| 角色名:枫落_等级:201                                  |
+-------------------------------------------------------+

 

使用别名 

通过SELECT语句可以拼接字段,但新的的字段是没有名字的(列名),无法再次引用。为了解决这个问题,SQL支持别名,使用AS关键字实现命名别名。

例3:

mysql> SELECT CONCAT ("角色名:",roleName,"_" ,"等级:",level) AS role_name_level FROM roleinfo;
+-------------------------+
| role_name_level         |
+-------------------------+
| 角色名:Sam_100_等级:107 |
| 角色名:枫落_等级:201    |
| 角色名:Sbm_100_等级:101 |
+-------------------------+

注:
1、SELECT语句本身与以前使用的相同,现在只不过是在这个语句中计算字段后跟了文本 AS role_name_level。它指示SQL创建一个包含指定计算字段名为role_name_level的列。从输出结果来看,结果与以前无任何区别,只是显示列名为role_name_level了,因此现在任何客户机都可以按名引用这个列,就像它是一个实际存在的表列一样。

2、别名还有其他的用处:在实际的表列名中包含不符合规定的字符(如空格)时重新命名它,在原来的列名含混或容易被误解时扩充它。

3、别名有时候也被称为导出列,不管称为什么,他们所代表的都是相同的东西

 

执行算术计算

计算字段的另一个常见用途是对检索出的数据进行算术计算

例4:

mysql> SELECT level,career,camp,level*career AS total FROM roleinfo WHERE camp = 2;
+-------+--------+------+-------+
| level | career | camp | total |
+-------+--------+------+-------+
|   107 |      2 |    2 |   214 |
|   201 |      3 |    2 |   603 |
+-------+--------+------+-------+

注:
1、输出结果中total列为一个计算字段,客户机可以直接使用这个列,就像使用其他列一样。

2、    MYSQL支持下表中给出的基本算术操作符,此外,圆括号可以用来区分算术优先级

操作符

说明

+

 加

-  

 减

*  


/  

 除

 

拓展:
SELECT提供了测试和试验函数与计算的一个很好的办法。虽然SELECT通常用来从表中检索数据,但还可以省略FROM子句以便简单的访问和处理表达式。

例如,SELECT 3*2(返回6),SELECT Trim("abc ")(将返回abc),而SELECT Now()利用Now()函数返回当前时间