MySQL基础之创建计算字段

创建计算字段

存储在数据库表中的数据一般不是应用程序所需的格式。我们需要直接从数据库中检索出转换、计算或格式化过的数据; 而不是检索出数据, 然后再在客户机应用程序上重新格式化。这就是计算字段的作用。

计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。

需要注意的是, 只有数据库知道SELECT语句中哪些列是实际的表列, 哪些列是计算字段。在客户机角度来看, 计算字段的数据是以与其他列的数据相同的方式返回的。

拼接字段

拼接(concatenate): 将值联结到一起构成单个值

在MySQL的SELECT语句中, 可使用Connat()函数来拼接两个列

MySQL的不同之处

多数DBMS使用+或||来实现拼接, MySQL则使用Concat()函数来实现。

MariaDB [crashcourse]> SELECT Concat(vend_name, '(', vend_country, ')') FROM vendors ORDER BY vend_name;
+-------------------------------------------+
| Concat(vend_name, '(', vend_country, ')') |
+-------------------------------------------+
| ACME(USA)                                 |
| Anvils R Us(USA)                          |
| Furball Inc.(USA)                         |
| Jet Set(England)                          |
| Jouets Et Ours(France)                    |
| LT Supplies(USA)                          |
+-------------------------------------------+
6 rows in set (0.003 sec)

MariaDB [crashcourse]> 

Concat()拼接串, 即把多个串连接起来形成一个较长的串。Concat()需要一个或多个指定的串, 各个串之间使用逗号分隔。

删除数据右侧多余的空格来整理数据, 这可以使用MySQL的RTrim()函数来完成。

MariaDB [crashcourse]> SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') FROM vendors ORDER BY vend_name;
+---------------------------------------------------------+
| Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') |
+---------------------------------------------------------+
| ACME(USA)                                               |
| Anvils R Us(USA)                                        |
| Furball Inc.(USA)                                       |
| Jet Set(England)                                        |
| Jouets Et Ours(France)                                  |
| LT Supplies(USA)                                        |
+---------------------------------------------------------+
6 rows in set (0.003 sec)

MariaDB [crashcourse]> 

Trim函数

MySQL除了支持RTrim函数()(去掉串右边的空格)之外, 还支持LTrim()(去掉串左边的空格)以及Trim()(去掉串左右两边的空格)

使用别名

SELECT拼接计算字段中, 新计算出来列的名字其实不是名字, 它只是一个值。一个未命名的列不能应用于客户机应用中, 因为客户机没办法引用它。

为了解决这个问题, SQL还支持列别名。别名(alias)是一个字段或值的替换名。别名用AS关键字赋予

MariaDB [crashcourse]> SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;
+------------------------+
| vend_title             |
+------------------------+
| ACME(USA)              |
| Anvils R Us(USA)       |
| Furball Inc.(USA)      |
| Jet Set(England)       |
| Jouets Et Ours(France) |
| LT Supplies(USA)       |
+------------------------+
6 rows in set (0.001 sec)

MariaDB [crashcourse]> 

它指示SQL创建一个包含指定计算的名为vend_title的计算字段。现在列名为vend_title, 任何客户机应用都可以按名引用这个列。就像它是一个实际的表列一样。

执行算术计算

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

MariaDB [crashcourse]> SELECT prod_id, quantity, item_price, quantity * item_price AS expanded_price FROM orderitems WHERE order_num = 20005;
+---------+----------+------------+----------------+
| prod_id | quantity | item_price | expanded_price |
+---------+----------+------------+----------------+
| ANV01   |       10 |       5.99 |          59.90 |
| ANV02   |        3 |       9.99 |          29.97 |
| TNT2    |        5 |      10.00 |          50.00 |
| FB      |        1 |      10.00 |          10.00 |
+---------+----------+------------+----------------+
4 rows in set (0.000 sec)

MariaDB [crashcourse]> 

MySQL支持表中列出的基本算术运算操作符。 此外, 圆括号可用来区分优先顺序。

如何测试计算

SELECT提供了测试和试验函数与计算的一个很好的办法。可以忽略FROM子句以便简单地访问和处理表达式。

例如: SELECT 3*2; 将返回6, SELECT Trim('abc '); 将返回abc, 而SELECT Now()利用Now()函数返回当前日期和时间。

原文地址:https://www.cnblogs.com/featherwit/p/13369054.html