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)
總結
以上是生活随笔為你收集整理的mysql 字段等于select_mysql_select_计算字段_数据处理函数_5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP服务器端语言是什么意思,PHP作为
- 下一篇: UC浏览器电脑版怎么自定义标签栏 标签栏