sql select语句(四)
一、计算字段
字段: 基本上于列的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段常用在计算字段的连接上。
1. 拼接字段
拼接:将值联结到一起构成单个值
MySQL 进行拼接,可以在SELECT语句中使用Concat()函数来拼接两个列
例:假如我们想让表ms的数据的name和age以 name:age 这样的格式输出,我们们就可以shiy9ongConcat()函数
SELECT Concat(name,':',age) FROM ms;
Concat()拼接串,即把多个串连接起来形成一个较长的串。
Concat()需要一个或多个指定的串,各个串之间用逗号分隔
我们还可以用 AS 关键字为得到的字段取一个别名
例: SELECT Concat(name,':',age) AS name_age FROM ms;
2. RTrim() & LTrim() & Trim()
函数 RTrim(),LTrim(),Trim()的用处与java中的是一样的
RTrim(): 去除字符串右边的空格
LTrim(): 去除字符串左边的空格
Trim(): 去除字符串两边的空格
例: SELECT RTrim(name) FROM ms;
输出ms表name列的数据并去除name右边的空格。
3.算数计算
我们可以对数据为int,double类型的列进行算数计算,
如:我们有一个订单表orderitems,我们想通过数量quantity和单价item_price得到总价(数量*单价)
例: SELECT quantity*item_price AS expanded_price FROM orderitems;
注:MySQL支持基本算术操作符(+-/*),此外,圆括号可以用来区分优先顺序。
4. Now()
SELECT Now(); 可以返回当前时间。
注: SELECT Trim(' abc '); :返回abc,
SELECT 3*3; : 返回9。
5.数据处理函数
与大多数计算机语言一样,SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便。
注:函数没有SQL的可移植性,几乎每种主要的DBMS的实现都支持其他实现不支持的函数,而且有时差异还很大,如果决定使用函数,应该做好注释,以便以后移植的便利性,能不用就不用了。
大多数SQL支持以下类型的函数
- 用于处理文本串(如删除或填充值,转换大小写)的文本函数
- 用于在数值数据上进行算数计算操作(如返回绝对值,进行代数运算)的数值函数
- 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性等)的日期和时间函数
- 返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数。
1. 文本函数
函数 | 说明 |
---|---|
Left() | 返回串左边的字符 |
Length() | 返回串的长度 |
Locate() | 找出串的一个子串 |
Lower() | 将串转换为小写 |
LTrim() | 去掉左边的空格 |
Right() | 返回串右边的字符 |
RTrim() | 去掉右边的空格 |
Soundex() | 返回串的SOUNDEX值 |
SubString() | 返回子串的字符 |
Upper() | 将串转换为大写 |
2.日期和时间处理函数
说明 | 函数 |
---|---|
AddDate() | 增加一个日期(天,周等) |
AddTime() | 增加一个时间(时,分等) |
CurDate() | 返回当前日期 |
CurTime() | 返回当前时间 |
Date() | 返回时期时间的日期部分 |
DateDiff() | 计算两个日期之差 |
Date_Add() | 高度灵活的日期运算函数 |
Date_Format() | 返回一个格式化的日期或时间串 |
Day() | 返回一个日期的天数部分 |
DayOfWeek() | 对于一个日期,返回对应的星期几 |
Hour() | 返回一个时间的小时部分 |
Minute() | 返回一个时间的分钟部分 |
Month() | 返回一个日期的月份部分 |
Now() | 返回当前日期和时间 |
Second() | 返回一个时间的秒部分 |
Time() | 放一个日期时间的时间部分 |
Year() | 返回一个日期的年份部分 |
注:MySQL不管是插入,更新,过滤,格式都应该是yyyy-mm-dd。
例: SELECT name,age FROM ms WHERE birthday='1998-02-04';
该语句检索出birthday为1998-02-04的数据的name,age,但如果我们储存的数据为'1998-02-04 08:23:19'则我们就检索不出来了
这是我们可以使用日期函数Date()
例: SELECT name,age FROM ms WHERE Date(birthday)='1998-02-04';
SELECT name,age FROM ms WHERE Date(birthday) BETWEEN '1998-02-01' AND '1998-02-28';
我们可以使用 BETWEEB 来定义一个时间范围
我们还有另外一种方法,不需要我们来计算这一年是否是闰年了
例: SELECT name,age FROM ms WHERE Year(birthday) = 1998 AND Month(birthday) = 2;
3. 数字处理函数
函数 | 说明 |
---|---|
Abs() | 返回一个数的绝对值 |
Cos() | 返回一个角度的余弦值 |
Exp() | 返回一个数的指数值 |
Mod() | 返回除操作的余数 |
Pi() | 返回圆周率 |
Rand() | 返回一个随机数 |
Sin() | 返回一个角度的正弦值 |
Sqrt() | 返回一个数的平方根 |
Tan() | 返回一个角的正切值 |
6. 聚合函数
1. AVG() :返回某列的平均值
例: SELECT AVG(age) FROM ms;
2. COUNT() : 返回某列的行数
例: SELECT COUNT(*) FROM ms;
注:如果COUNT()的值不为* 则忽略NULL值
3. MAX() : 返回某列的最大值
例: SELECT MAX(age) FROM ms;
4. MIN() : 返回某列的最小值
例: SELECT MIN(age) FROM ms;
5. SUM() : 返回某列的总和
例: SELECT SUM(quantity*item_price) AS SUM_price FROM orderitems;