计算字段和数值处理函数

2018-07-02  本文已影响9人  禅与发现的乐趣

拼接字段

MySQL 的不同之处:多数 DBMS 使用+或||来实现拼接,MySQL 使用 Concat()函数来实现。

拼接两个列

将两列拼接成一个展示形式:vend_name (vend_country)

mysql> 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)                          |
+--------------------------------------------+
删除多余的空格 RTRIM
SELECT CONCAT(RTRIM(vend_name), ' (', vend_country, ')') FROM vendors ORDER BY vend_name;

显然 MySQL 还支持LTRIMTRIM分别删除左边的空格和两边的空格。

使用别名AS

签名拼接两列的结果可以看到,拼接后的列名是CONCAT(vend_name, ' (', vend_country, ')'),这显然很不友好,所以我们可以使用别名。

mysql> 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)       |
+-------------------------+

执行算术计算

执行算术运算并扩充字段显示:

mysql> 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 |
+---------+----------+------------+----------------+

MySQL 支持的加减乘除(+ - * 、)算术运算符,并用括号区分优先级

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

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2018-06-30 16:33:47 |
+---------------------+
1 row in set (0.00 sec)

数据处理函数

函数我们前面已经接触了,比如 trim()rtrim()ltrim()

文本处理函数

upper()

mysql> SELECT vend_name, UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
+----------------+------------------+
| vend_name      | vend_name_upcase |
+----------------+------------------+
| ACME           | ACME             |
| Anvils R Us    | ANVILS R US      |
| Furball Inc.   | FURBALL INC.     |
| Jet Set        | JET SET          |
| Jouets Et Ours | JOUETS ET OURS   |
| LT Supplies    | LT SUPPLIES      |
+----------------+------------------+

常用的文本处理函数:

函数 说明
left() 返回串左边的字符
length() 返回串的长度
locate() 找出串的一个子串
lower() 将串转换为小写
ltrim() 去掉串左边的空格
right() 返回串右边的字符
rtrim() 去掉串右边的空格
soundex() 返回串的 SOUNDEX 值
substring() 返回子串的字符
upper() 将串转换成大写
日期和时间处理函数
函数 说明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DatOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个日期的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分

基本日期比较:

SELECT cust_id, order_num FROM orders WHERE order_date = '2005-09-01';

上面的匹配显然不合理,如果订单日期精确到时间的话,就无法匹配上了。

SELECT cust_id, order_num FROM orders WHERE DATE(order_date) = '2005-09-01';

匹配一个时间段内的数据:

SELECT cust_id, order_num FROM orders WHERE DATE(order_date) BETWEEN '2005-09-01' and '2005-09-30';
优化后
SELECT cust_id, order_num FROM orders WHERE YEAR(order_date) = 2005 and MONTH(order_date) = 9;
数值处理函数
函数 说明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
上一篇下一篇

猜你喜欢

热点阅读