mysql必知必会第10~11章笔记
目录
第10章:创建计算字段:
字段
基本上与列的意思相同,经常互换使用.
拼接字段
可以使用Concat(字段1,字段2,...)函数来拼接字段
SELECT CONCAT(prod_id,' 的prod_name是: ',prod_name) AS jvzi
FROM products;
上面就将prod_id,"的prod_name是: ",prod_name拼接了起来,AS 是起别名的意思:如果不起别名,返回的列名将是:CONCAT(prod_id,' 的prod_name是: ',prod_name)这么长,所以起了别名jvzi,返回的列名就是:jvzi
不起别名的结果:
+------------------------------------------------+
| CONCAT(prod_id,' 的prod_name是: ',prod_name) |
+------------------------------------------------+
| ANV01 的prod_name是: .5 ton anvil |
| ANV02 的prod_name是: 1 ton anvil |
| ANV03 的prod_name是: 2 ton anvil |
| DTNTR 的prod_name是: Detonator |
| FB 的prod_name是: Bird seed |
| FC 的prod_name是: Carrots |
| FU1 的prod_name是: Fuses |
| JP1000 的prod_name是: JetPack 1000 |
| JP2000 的prod_name是: JetPack 2000 |
| OL1 的prod_name是: Oil can |
| SAFE 的prod_name是: Safe |
| SLING 的prod_name是: Sling |
| TNT1 的prod_name是: TNT (1 stick) |
| TNT2 的prod_name是: TNT (5 sticks) |
+------------------------------------------------+
起别名的结果:
+--------------------------------------+
| jvzi |
+--------------------------------------+
| ANV01 的prod_name是: .5 ton anvil |
| ANV02 的prod_name是: 1 ton anvil |
| ANV03 的prod_name是: 2 ton anvil |
| DTNTR 的prod_name是: Detonator |
| FB 的prod_name是: Bird seed |
| FC 的prod_name是: Carrots |
| FU1 的prod_name是: Fuses |
| JP1000 的prod_name是: JetPack 1000 |
| JP2000 的prod_name是: JetPack 2000 |
| OL1 的prod_name是: Oil can |
| SAFE 的prod_name是: Safe |
| SLING 的prod_name是: Sling |
| TNT1 的prod_name是: TNT (1 stick) |
| TNT2 的prod_name是: TNT (5 sticks) |
+--------------------------------------+
算术运算
mysql也支持+,-,*,/的算数运算:
SELECT prod_name,2*prod_price
FROM products;
上面返回了prod_name 和2倍的prod_price
+----------------+--------------+
| prod_name | 2*prod_price |
+----------------+--------------+
| .5 ton anvil | 11.98 |
| 1 ton anvil | 19.98 |
| 2 ton anvil | 29.98 |
| Detonator | 26.00 |
| Bird seed | 20.00 |
| Carrots | 5.00 |
| Fuses | 6.84 |
| JetPack 1000 | 70.00 |
| JetPack 2000 | 110.00 |
| Oil can | 17.98 |
| Safe | 100.00 |
| Sling | 8.98 |
| TNT (1 stick) | 5.00 |
| TNT (5 sticks) | 20.00 |
+----------------+--------------+
注意:必须是数值类型的列才能运算,可以用括号改变优先级
第11章 函数
常用的文本(字符串)处理函数
| 函数 | 说明 |
|---|---|
| Concat(string1,string2...) | 拼接字符串(也可以是字段) |
| Trim(string) | 去除字符串两端的空格 |
| LTrim(string) | 去除字符串左端的空格 |
| RTrim(string) | 去除字符串右端的空格 |
| Length(string) | 以字节形式返回字符串的长度 |
| Left(string,length) | 从字符串的左边截取length个字符返回 |
| Right(string,length) | 从字符串的右边截取length个字符返回 |
| Substring(string,pos,len) | 从字符串的pos的位置截取len个字符返回(pos从1开始算) |
| Upper(string) | 字符串转大写 |
| Ucase(string) | 同Upper(string) |
| Lower(string) | 字符串转小写 |
| Lcase(string) | 同Lower(string) |
| Charset(string) | 返回字符串的字符集 |
| Instr(string,子串) | 返回子串在主串的开始位置 |
| Replace(str,from_str,to_str) | 将str中的from_str子串替换为to_str |
| Strcmp(str1,str2) | 比较字符串大小,str1>str2 返回>0 str1<str2 返回<0 相等返回=0 |
举个例子:
将prod_name列与prod_id拼接后转换为大写
SELECT UPPER(CONCAT(prod_name,prod_id)) AS result
FROM products;
日期处理函数
| 函数 | 说明 |
|---|---|
| AddDate(datetime,interval xxx year/month/day/hour/minute/second) | 增加日期时间,xxx是想增加的数字 |
| Date_add(datetiem,interval xxx year/month/day/hour/minute/second) | 同AddDate() |
| Date_sub(datetiem,interval xxx year/month/day/hour/minute/second) | 减少日期时间 |
| Current_date() | 返回当前日期 |
| Current_tiem() | 返回当前时间 |
| Current_timestamp() | 返回当前完整时间 |
| Datediff(date1,date2) | 计算date1和date2相差多少天 |
| Timediff(date1,date2) | 计算date1和date2相差了多长时间(时分秒) |
| Date_format(datetime,'%Y-%m-%d') | 返回一个格式化时间,%Y%m%d(年,月,日)可选部分 |
| UNIX_TIMESTAMP() | 返回从1970-1-1到现在经历的秒数 |
| FROM_UNIXTIME(1646915868) | 将秒数转换成时间,UNIX_TIMESTMAP()反着来 |
| DayofWeek(datetime) | 返回星期几 |
| Date(datetime) | 返回时间的日期部分 |
| Time(datetiem) | 返回日期的时间部分 |
| Now() | 返回当前日期和时间 |
| Year(datetime) | 返回年份 |
| Month(datetime) | 返回月份 |
| Day(datetime) | 返回几号 |
| Hour(datetime) | 返回小时 |
| Minute(datetime) | 返回几分 |
| Second(datetime) | 返回几秒 |
案例:
- 计算2022-3-29 10:10:10 到2022-4-1 10:20:10相差了多少分钟
SELECT HOUR(TIMEDIFF('2022-4-1 10:20:10','2022-3-29 10:10:10'))*60+
MINUTE(TIMEDIFF('2022-4-1 10:20:10','2022-3-29 10:10:10')) AS minutes;
输出:
+---------+
| minutes |
+---------+
| 4330 |
+---------+
- 将2022-4-1 10:20:10变成年-月格式
SELECT DATE_FORMAT('2022-4-1 10:20:10','%Y-%m');
数学相关函数
| 函 数 | 说 明 |
|---|---|
| Abs(num) | 返回一个数的绝对值 |
| Cos(num) | 返回一个角度的余弦 |
| Mod(num1,num2) | 返回除操作的余数 |
| Pi() | 返回圆周率 |
| Rand() | 返回一个随机数 |
| Rand(seed) | 返回有种子的随机数 |
| Sin(num) | 返回一个角度的正弦 |
| Sqrt(num) | 返回一个数的平方根 |
| Tan(num) | 返回一个角度的正切 |
| Bin(num) | 十进制转二进制 |
| Ceiling(num) | 向上取整 |
| Floor(num) | 向下取整 |
| Conv(num,from_base,to_base) | 进制转换,将num从from_base转到to_base; |
| Format(num,decimal_places) | 保留小数位数 |
| Hex(num) | 转16进制 |
| Least(num1,num2,...) | 取最小值 |
案例:
返回9除以5的余数:
SELECT MOD(9,5) as result ;
输出:
+--------+
| result |
+--------+
| 4 |
+--------+
使用上都比较简单,在此不展开了.

