博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL必知必会 -- 创建计算字段
阅读量:4203 次
发布时间:2019-05-26

本文共 6069 字,大约阅读时间需要 20 分钟。

存储在数据库表中的数据一般不是应用程序所需要的格式。们所需要的的可能是几个连起来的列。

比如:

  • 如果想在一个字段中既显示公司名,又显示公司的地址,但这两个信息一般包含在不同的表列中。
    城市、州和邮政编码存储在不同的列中(应该这样),但邮件标签
  • 打印程序却需要把它们作为一个恰当格式的字段检索出来。列数据是大小写混合的,但报表程序需要把所有数据按大写表示出来。
  • 物品订单表存储物品的价格和数量,但不需要存储每个物品的总价格(用价格乘以数量即可)。为打印发票,需要物品的总价格。需要根据表数据进行总数、平均数计算或其他计算。

我们需要直接从数据库中检索出转换、计算或格式化过的数据

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

拼接字段

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

MariaDB [test]> select concat(user,' (',age,')') from linux;+---------------------------+| concat(user,' (',age,')') |+---------------------------+| user1 (18)                || user2 (23)                || user3 (12)                || user4 (22)                || user5 (30)                || a (22)                    || 1 (30)                    || user1 (18)                || user11 (31)               || user111 (41)              || user1.1 (42)              || (cay) (21)                || (cays) (21)               |+---------------------------+13 rows in set (0.04 sec)

SELECT语句连接以下4个元素:

  • user 列
  • ( 前面有个空格
  • age列
  • )

他们之间用 ,隔开

() 是我们用单引号引用进去的。

MariaDB [test]> insert into linux value('tt   ','tttt','girl','24');Query OK, 1 row affected (0.05 sec)	/插入带有空格的数据MariaDB [test]> select concat(user,' (',age,')') from linux order by user; +---------------------------+| concat(user,' (',age,')') |+---------------------------+| (cay) (21)                || (cays) (21)               || 1 (30)                    || a (22)                    || tt    (24)                |	/当数据后面有多个空格时| user1 (18)                || user1 (18)                || user1.1 (42)              || user11 (31)               || user111 (41)              || user2 (23)                || user3 (12)                || user4 (22)                || user5 (30)                |+---------------------------+14 rows in set (0.00 sec)MariaDB [test]> select concat(rtrim(user),' (',age,')') from linux order by user; +----------------------------------+| concat(rtrim(user),' (',age,')') |+----------------------------------+| (cay) (21)                       || (cays) (21)                      || 1 (30)                           || a (22)                           || tt (24)                          || user1 (18)                       || user1 (18)                       || user1.1 (42)                     || user11 (31)                      || user111 (41)                     || user2 (23)                       || user3 (12)                       || user4 (22)                       || user5 (30)                       |+----------------------------------+14 rows in set (0.00 sec)我们可以使用 RTrim() 函数去掉值右边的所有空格。对整个列生效

还支持LTrim()(去掉串左边的空格)以及Trim()(去掉串左右两边的空格)。

使用别名

别名(alias)是一个字段或值的替换名。别名用 AS 关键字赋予。

MariaDB [test]> select concat(user,'(',age,')') from linux order by user DESC limit 5;+--------------------------+| concat(user,'(',age,')') |		/注意这个名字,他是代表一个值+--------------------------+| user5(30)                || user4(22)                || user3(12)                || user2(23)                || user111(41)              |+--------------------------+5 rows in set (0.02 sec)MariaDB [test]> select concat(user,'(',age,')') as a from linux order by user DESC limit 5;+-------------+| a           |		、使用别名后就可以用 a 来代替这个合起来的字段+-------------+	| user5(30)   || user4(22)   || user3(12)   || user2(23)   || user111(41) |+-------------+5 rows in set (0.00 sec)MariaDB [test]> select user as U from linux limit 3;+-------+| U     |		/也可以用来替换一个字段+-------+| user1 || user2 || user3 |+-------+3 rows in set (0.00 sec)

别名的其他用途 别名还有其他用途。常见的用途包括:

  • 在实际的表列名包含不符合规定的字符(如空格)时重新命名它,
  • 在原来的名字含混或容易误解时扩充它

执行算术计算

算数计算配合 as 使用。

在这里插入图片描述

MariaDB [test]> select * from linux;+--------+----------+------+------+-----+-------+| user   | passwd   | sex  | age  | num | price |+--------+----------+------+------+-----+-------+| user2  | 222      | girl | 23   | 3   | 155   || user3  | 333      | boy  | 12   | 1   | 78    || user4  | 444      | boy  | 22   |     | NULL  || user5  | 555      | boy  | 30   |     | NULL  || user1  | 111      | boy  | 18   | 2   | 35    |+--------+----------+------+------+-----+-------+9 rows in set (0.00 sec)MariaDB [test]> select  user,    -> passwd,    -> num*price as total_price		/计算    -> from linux    -> order by user;+--------+----------+-------------+| user   | passwd   | total_price |+--------+----------+-------------+| user1  | 111      |          70 || user2  | 222      |         465 || user3  | 333      |          78 || user4  | 444      |        NULL || user5  | 555      |        NULL |+--------+----------+-------------+9 rows in set (0.01 sec)

如果是比较复杂的数据的话,可以使用圆括号来区分优先顺序

MariaDB [test]> select * from linux;+--------+----------+------+------+-----+-------+------------+| user   | passwd   | sex  | age  | num | price | math_price |+--------+----------+------+------+-----+-------+------------+| user2  | 222      | girl | 23   | 3   | 155   | 36         || user3  | 333      | boy  | 12   | 1   | 78    | 66         || user4  | 444      | boy  | 22   |     | NULL  | NULL       || user5  | 555      | boy  | 30   |     | NULL  | NULL       || user1  | 111      | boy  | 18   | 2   | 35    | 88         |+--------+----------+------+------+-----+-------+------------+9 rows in set (0.00 sec)MariaDB [test]> select user,    -> passwd,    -> num*(price+math_price)    -> from linux    -> order by user    -> limit 3;+--------+----------+------------------------+| user   | passwd   | num*(price+math_price) |+--------+----------+------------------------+| user1  | 111      |                    246 |	2*(35+88)=246| user2  | 222      |                    573 |	3*(155+36)=573| user3  | 333      |                    144 |	1*(78+66)=144+--------+----------+------------------------+

一些简单的处理

MariaDB [test]> select 3*2;+-----+| 3*2 |+-----+|   6 |+-----+1 row in set (0.00 sec)MariaDB [test]> select now();+---------------------+| now()               |+---------------------+| 2020-08-04 18:59:34 |+---------------------+1 row in set (0.00 sec)MariaDB [test]> select Trim('  abc ');+----------------+| Trim('  abc ') |+----------------+| abc            |+----------------+1 row in set (0.00 sec)

转载地址:http://guxli.baihongyu.com/

你可能感兴趣的文章
Mybatis 出现Mapped Statements collection does not contain value for xxx
查看>>
Mybatis 解决字段名与实体类属性名不相同的冲突
查看>>
Mybatis Generator最完整配置详解
查看>>
Mybatis 一级缓存和二级缓存
查看>>
Hibernate 出现Unsupported major.minor version 52.0 [duplicate]
查看>>
Hibernate 使用Intellij IDEA自动生成.hbm.xml文件
查看>>
Hibernate 出现org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found问题的解决方案
查看>>
Hibernate 注解使用总结
查看>>
JAVA 事务之JDBC事务、JTA事务和容器事务
查看>>
EJB 是什么
查看>>
Hibernate 异常StrategySelectionException: Unable to resolve name EhCacheRegionFactory
查看>>
Hibernate 异常CacheException: Another unnamed CacheManager already exists in the same VM
查看>>
Python 常用的几种安装Module方式
查看>>
Mongodb 创建用户后登陆出现mongoAuthentication failed
查看>>
Mongodb GridFS、服务器脚本和数据库引用
查看>>
Mongodb 数据库管理
查看>>
JAVA 基本类型的默认值和取值范围
查看>>
JDK 1.5-1.8特性
查看>>
Jsp 出现异常IllegalArgumentException:Control character in cookie value or attribute解决方法
查看>>
Servlet 使用字符流读取文件乱码解决方法
查看>>