存储在数据库表中的数据一般不是应用程序所需要的格式:
一种是从数据库中检索出转换、计算或格式化过的数据
另一种是将检索出数据在客户机应用程序或报告程序中重新格式化
这里当然建议使用第一种,借助计算字段完成,计算字段是运行时在select 语句内创建的。
字段(field) : 基本与列(colum)的意思相同,不过在术语中字段通常用在计算字段的连接上,经常会互换使用,列指的是数据库的列
注意:
1、只有数据库知道select 语句中哪些列是实际的表列,那些列是计算字段
2、从客户机(如应用程序)的角度看,计算字段的数据是以与其他列的数据,以相同的方式返回的。
3、SQL 语句内完成的许多转换和格式化的工作在客户机应用程序内也可以完成,但是数据库服务器比用程序要快,因为设计的DBMS 可以快速有效的完成这些处理
1、去除空格 (trim,rtrim,ltrim)
Trim () 函数:去掉字符串左右两边的空格
RTrim () 函数:去掉字符串右边的空格
LTrim () 函数:去掉字符串左边的空格
2、拼接字段
拼接(concatenate): 将值联结到一起构成单个值。
注意:多数的DBMS 使用 + 或 || 来实现拼接,Mysql 使用Concat() 函数实现。
借助Concat() 拼接串,将多个串连接起来形成一个较长的串,
用到的表
-- 将供应商表中的名字和所处城市按照 名字(国家) 的形式放在一块,共有四个元素,名字,左边括号,国家,右边括号 select Concat (vend_name,'(',vend_country,')') from vendors order by vend_name;
注意:
1、Concat () 拼接串需要一个或多个指定的串,各个串之间用逗号分隔。
-- 与trim 组合使用 select Concat (vend_name,'(',trim(vend_country),')') from vendors order by vend_name;
3、别名 ( as) : 一个字段或值的替换名,关键字 AS (有时也称为导出列)
刚才拼接的字符串的列名,实际上他没有名字只是一个值,
不知道表示什么意思,要是只是查看一下无所谓,但是一个未命名的列不能用于客户机的应用中(不能被程序i引用)
-- 将计算的字段起个名叫 vend_title select Concat (vend_name,'(',trim(vend_country),')') AS vend_title from vendors order by vend_name;
注意: 别名的其他用途 如在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混容易误解时扩充它。
导出列:别名有时也称为导出列(derived column),不管称为什么他们都代表着相同的东西
4、执行算术计算
来个小例子:
用到的表
-- 将订单号为 20005 的商品查出来 select prod_id,quantity,item_price from orderitems where order_num = 20005;
我们可以看到,单价和订购数量,但是总价没有,下面借助mysql 的算数操作符实现
-- 计算商品总价 select prod_id,quantity,item_price,quantity*item_price as total_Price from orderitems where order_num = 20005;
测试计算;使用select, 虽然Select 通常用来从表中检索数据,但也可以省略FROM 子句简单的访问和处理表达式。
-- 获取系统当前时间 select NOW();