mysql 字段等于select_mysql_select_计算字段_数据处理函数_5

二十一、创建计算字段

1、 concat() 把两个字段拼接起来

select concat(lie_name1,'间隔符',lie_name2) from

table_name;

选择出  name-type(price)

这样的格式输出,按id从小到大排序

mysql> select

concat(name,'-',type,'(',price,')') from goods order by id;

+-------------------------------------+

| concat(name,'-',type,'(',price,')') |

+-------------------------------------+

| fangbianmi-A(1)  |

| mianbao-A(5)  |

| kele-A(50)  |

| meat-B(13)  |

| meat-A(18)  |

| fish-B(16)  |

| fish-A(20)  |

| milk-C(3)  |

| T-shirt-D(60)  |

| .pen-D(30)  |

| book  .-D(20)  |

|  yagao-D(10)  |

| xiangjiao-A(8)  |

| guo-D(160)  |

| wan  -D(8)  |

|  yashua-D(11)  |

| /  cup-D(35)  |

+-------------------------------------+

17 rows in set (0.00 sec)

括号用来扩出间隔符,本例子中是- (),实际上我认为是以字符型的形式直接输出而已

2、rtrim 删除字段右侧的多余空格

select rtrim(lie_name1) from table_name;

上个例子可以看出,name=wan的这个字段右侧有空格,我们把这个空格消除看看

mysql> select concat(rtrim(name),'-') from

goods where id = 14;

+-------------------------+

| concat(rtrim(name),'-') |

+-------------------------+

| wan-  |

+-------------------------+

1 row in set (0.00 sec)

这个为了能显示出来,在name后面加上一个‘-’,这样能看出是否有空格。

3、alias  别名,使用as

上面我们concat()函数,把多个字段拼接成一个新的字段,但是他们的字段名不太好,我们可以使用as这个函数来实现

说两个例子

as可以给字段(列)取一个名字,比如说我们上面那样,拼在一起的列,也可以给表取一个别名,这样感觉上只是简便了sql的书写

给字段取别名as

mysql> select concat(rtrim(name),'-',price) as

GOODS from goods;

+--------------+

| GOODS  |

+--------------+

| fangbianmi-1 |

| mianbao-5  |

| kele-50  |

| meat-13  |

| meat-18  |

| fish-16  |

| fish-20  |

| milk-3  |

| T-shirt-60  |

| .pen-30  |

| book  .-20  |

| xiangjiao-8  |

| /  cup-35  |

| wan-8  |

|  yashua-11  |

|  yagao-10  |

| guo-160  |

+--------------+

17 rows in set (0.01 sec

把字段名字该成了GOODS

给表取别名as

mysql> select w.id,w.name,g.name as goods from

worker as w,goods as g where g.id in (1,2,3) and w.id=g.id;

+----+----------+------------+

| id | name  | goods

|

+----+----------+------------+

|  1 | zhangsan | fangbianmi |

|  2 | lisi  | mianbao  |

|  3 | wangwu  | kele

|

+----+----------+------------+

3 rows in set (0.00 sec)

这个不太好看,是这样的,给worker as w,goods as g,

然后我们在拼接两个表的列的时候,就很轻松了,不容再输入繁琐的表全称,需要注意的是,这里把两个表的id当做外键来使用了。

4、执行数据计算

因为我做表的失误,现在假设goods表中,id为该物品的购买数量。现在计算前五个商品的价格总和

mysql> select name,price,id as

quantity,id*price as sum from goods where id <=

5;

+------------+-------+----------+------+

| name  | price | quantity | sum

|

+------------+-------+----------+------+

| fangbianmi |  1 |

1 |  1

|

| mianbao  |

5 |  2 |

10 |

| kele  |  50 |

3 |  150 |

| meat  |  13 |

4 |  52 |

| meat  |  18 |

5 |  90 |

+------------+-------+----------+------+

5 rows in set (0.00 sec)

mysql支持+ - * /,如果想控制计算的顺序,可以使用(),这样比较直观

二十二、数据处理函数

相对于其他的sql语句,函数的可移植性比较差,因为每种DBMS都有自己的函数库,但是语句大部分都差不多,所以如果要使用函数的话,最好用#写好注释

1、文本处理函数

rtrim()本身就是一个文本处理的函数

upper(),作用是将字段改为大写

mysql> select upper(name) as NAME from goods

order by id;

+------------+

| NAME  |

+------------+

| FANGBIANMI |

| MIANBAO  |

| KELE  |

| MEAT  |

| MEAT  |

| FISH  |

| FISH  |

| MILK  |

| T-SHIRT  |

| .PEN  |

| BOOK  .  |

|  YAGAO  |

| XIANGJIAO  |

| GUO  |

| WAN  |

|  YASHUA  |

| /  CUP  |

+------------+

17 rows in set (0.01 sec)

文本处理函数还有很多,这里只说常用的

left(lie_name1,num) 输出这一列左边num个字符

rigth(lie_name1,num) 输出这一列右边num个字符

lower(lie_name) 转换为小写

ltrim(lie_name) 清除字段左边的空格

rtrim(lie_name) 清除字段右边的空格

lower(lie_name) 转换字段为小写

substring(lie_name,num1,num2) 取字段第num1个字符还是的后面num2个字符

2、日期和时间处理函数

日期数据类型:

DATE 表示1000-01-01~~~9999-12-31,格式为YYYY-MM-DD

TIME 格式为 HH:MM:SS

DATETIME DATE和TIME的组合

YEAR

用量为数字表示,范围是70(1970)~~~69(2069),用四位数字表示,范围是1901~~2155

adddate() 增加一个日期(天、周)

addtime() 增加一个时间(时、分)

curdate() 返回当前日期

curtime() 返回当前时间

date() 返回日期时间的日期部分

datediff() 尖酸两个日期之差

date_add() 高度灵活的日期运算函数

date_format() 返回一个格式化的日期或时间串

day() 返回一个日期的天数

dayofweek() 对于一个日期,返回对应的星期几

hour() 返回一个时间的小时部分

minute() 返回一个时期的分钟部分

month() 返回一个日期的月份部分

now() 返回当前日期和时间

second() 返回一个时间的秒部分

time() 返回一个日期时间的时间部分

year() 返回一个日期的年份部分

修改一下goods表,加一个date列

mysql> alter table goods add column date

datetime;

mysql> select * from goods;

+----+------------+------+------------+-------+---------------------+

| id | name  | type | production | price | date

|

+----+------------+------+------------+-------+---------------------+

|  1 | fangbianmi | A  | zhengzhou  |

1 | 2011-12-13 05:12:55

|

|  2 | mianbao  | A  |

zhengzhou  |  5 | 2111-12-11 08:02:25 |

|  3 | kele  | A  | xian  |  50 |

2102-05-15 10:08:35 |

|  4 | meat  | B  | beijing  |

13 | 2101-01-15 18:08:35

|

|  5 | meat  | A  | beijing  |

18 | 1902-05-15 10:09:35

|

|  6 | fish  | B  | shandong  |

16 | 2101-05-17 12:09:35

|

|  7 | fish  | A  | shandong  |

20 | 2001-08-17 14:03:35

|

|  8 | milk  | C  | shandong  |

3 | 2000-09-27 05:53:05

|

|  9 | T-shirt  | D  |

guangzhou  |  60 | 2004-07-20 05:53:44 |

| 10 | .pen  | D  |

shenzhen  |  30 | 2011-08-20 05:53:04 |

| 11 | book  .  | D  |

shenzhen  |  20 | 2011-01-30 19:53:04 |

| 12 | xiangjiao  | A  | shenzhen  |

8 | 2012-12-25 10:23:34

|

| 16 | /  cup  | D  |

guangzhou  |  35 | 2142-08-11 19:04:19 |

| 14 | wan  | D  | tianjin  |

8 | 2012-08-21 10:11:44

|

| 15 |  yashua  | D

| guangzhou

|  11 |

2042-04-21 09:04:07 |

| 11 |  yagao  | D  |

guangzhou  |  10 | 2011-01-30 19:53:04 |

| 13 | guo  | D  | tianjin  |

160 | 2011-03-25 16:43:04 |

+----+------------+------+------------+-------+---------------------+

17 rows in set (0.00 sec)

我们存储的数据类型是datetime,包含日期和时间。

如果我们只按照数据的日期,找出需要的日期。就需要date()函数

select lie_name1 from table_name where

date(date_name)='YYYY-MM-DD'

mysql> select name from goods where

date(date)='2012-8-21';

+--------+

| name  |

+--------+

| wan  |

+--------+

1 row in set (0.00 sec)

假如我们想搜索2011年1月到5月的所有name

mysql> select name from goods where date(date)

between '2011-01-01' and '2011-5-31';

+---------+

| name  |

+---------+

| book  . |

|  yagao |

| guo  |

+---------+

3 rows in set (0.00 sec)

另外一种方法

mysql> select name from goods where

year(date)=2011 and month(date) in (1,2,3,4,5);

+---------+

| name  |

+---------+

| book  . |

|  yagao |

| guo  |

+---------+

3 rows in set (0.04 sec)

3、数值操作函数

这个函数是DBMS种最统一的函数

abs() 返回一个数的绝对值

cos() 返回一个角度的余弦

exp() 返回一个数的指数值

mod() 返回除操作的余数

pi() 返回圆周率

rand() 返回一个随机数

sin() 返回正弦

tan() 返回正切

选择ID除以3等于1的值

mysql> select name from goods where

mod(id,3)=1;

+------------+

| name  |

+------------+

| fangbianmi |

| meat  |

| fish  |

| .pen  |

| /  cup  |

| guo  |

+------------+

6 rows in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值