开篇寄语
前一篇在 MySQL 基础篇稍微了解了 MySQL 知识点,本篇文章则是在基础篇之上的进阶,掌握更多相关技巧,那么本篇文章就不要错过了。
前情提要
内容详情
MySQL 中有很多内构函数,描述作用以及例子来说明。
String 函数
函数 | 描述 | 例子 |
ASCII() | 返回特定字符的 ASCII 值 | ASCII('abc') |
CHAR_LENGTH() | 返回字符串的长度(以字符为单位) | CHAR_LENGTH('Hello World') |
CHARACTER_LENGTH() | 返回字符串的长度(以字符为单位) | CHARACTER_LENGTH('Hello World') |
CONCAT() | 将两个或多个表达式加在一起 | CONCAT('Hello World', '!!!') |
CONCAT_WS() | 将两个或多个表达式与分隔符相加 | CONCAT_WS('-','a','b') |
FIELD() | 返回值列表中数值的索引位置 | FIELD("a", "b", "c", "d") |
FIND_IN_SET() | 返回值列表中字符串的索引位置 | FIND_IN_SET("ab", "abstract,ab,abs") |
FORMAT() | 将数字格式化为“#,###,###.##”之类的格式,四舍五入到指定的小数位数 | FORMAT(2105.563, 2) |
INSERT() | 在指定位置的字符串中插入字符串,并插入一定数量的字符 | INSERT("Luckydesigner.space", 1, 13, "Example") |
INSTR() | 返回一个字符串在另一个字符串中第一次出现的位置 | INSTR("abstract,ab,abs",'b') |
LCASE() | 将字符串转换为小写 | LCASE("MySQL is Very Good!") |
LEFT() | 从字符串中提取多个字符(从左开始) | LEFT("MySQL Tutorial", 3) |
LENGTH() | 返回字符串的长度(以字节为单位) | LENGTH("MySQL is Very Good!") |
LOCATE() | 函数返回字符串中子字符串第一次出现的位置 | LOCATE('u','Luckydesigner.space') |
LOWER() | 将字符串转换为小写 | LOWER("MySQL is Very Good!") |
LPAD() | 用另一个字符串向左填充一个字符串,达到一定的长度 | LPAD("0123456", 20, "036") |
LTRIM() | 函数从字符串中删除前导空格 | LTRIM(" MySQL Tutorial") |
MID() | 函数从字符串中提取子字符串(从任意位置开始) | MID("MySQL Tutorial", 6, 3) |
POSITION() | 返回字符串中子字符串第一次出现的位置 | POSITION("u" IN "Luckydesigner.space") |
REPEAT() | 将字符串重复指定的次数 | REPEAT("MySQL Tutorial", 3) |
REPLACE() | 用新的子字符串替换字符串中所有出现的子字符串 | REPLACE("SQL Tutorial", "SQL", "MySQL"); |
REVERSE() | 反转一个字符串并返回结果 | REVERSE("MySQL Tutorial") |
RIGHT() | 从字符串中提取多个字符(从右开始) | RIGHT('MySQL Tutorial', 8) |
RPAD() | 用另一个字符串将一个字符串右填充到一定长度 | LPAD("0123456", 20, "036") |
RTRIM() | 函数从字符串中删除后导空格 | RTRIM("MySQL Tutorial ") |
SPACE() | 指定数量的空格字符的字符串 | SPACE(5) |
STRCMP() | 比较两个字符串 | STRCMP('abc','abc') 如果 A = B,返回0;如果 A > B,返回1;如果 A < B,返回-1 |
SUBSTR() | 从字符串中提取子字符串(从任意位置开始) | SUBSTR("MySQL Tutorial", 7, 3) |
SUBSTRING() | 从字符串中提取子字符串(从任意位置开始) | SUBSTRING("MySQL Tutorial", 7, 3) |
SUBSTRING_INDEX() | 在出现指定数量的分隔符之前返回字符串的子字符串 | SUBSTRING_INDEX('Luckydesigner.space', '.', 1) |
TRIM() | 返回清空字符串前后的空格 | TRIM(' MySQL Tutorial ') |
UCASE() | 将字符串转换为大写 | UCASE("MySQL is Very Good!") |
UPPER() | 将字符串转换为大写 | UPPER("MySQL is Very Good!") |
Numeric 函数
函数 | 描述 | 例子 |
ABS() | 返回绝对值 | abs(-10) |
ACOS() | 返回反余弦值 | ACOS(0.25) |
ASIN() | 返回反正弦值 | ASIN(0.25) |
ATAN() | 返回反正切值 | ATAN(2.5) |
ATAN2() | 返回两个数字的反正切 | ATAN2(0.50, 1) |
AVG() | 返回表达式的平均值 | AVG(Price) |
CEIL() | 返回大于或等于数字的最小整数值 | CEIL(25.62) |
CEILING() | 同CEIL() | CEILING(25.62) |
COS() | 返回余弦值 | COS(2) |
COT() | 返回余切值 | COT(6) |
COUNT() | 返回选择查询返回的记录数 | COUNT(Price) |
DEGREES() | 将弧度值转换为度数 | DEGREES(1.525) |
A DIV B | A 除以 B,返回整数 | 10.52 DIV 5.5 |
EXP() | 返回 e 的指定数字的幂 | EXP(1) |
FLOOR() | 返回小于或等于数字的最小整数值 | FLOOR(25.62) |
GREATEST() | 返回参数列表的最大值 | GREATEST(6,12,24,14,66) |
LEAST() | 返回参数列表的最小值 | LEAST(6,12,24,14,66) |
LN() | 返回数字的自然对数 | LN(2) |
LOG() | 返回指定数的自然对数,或该数与指定底数的对数 | LOG(2) |
LOG10() | 返回以 10 为底的数字的自然对数 | LOG10(2) |
LOG2() | 返回以 2 为底的数字的自然对数 | LOG2(2) |
MAX() | 返回一组值中的最大值 | MAX(Price) |
MIN() | 返回一组值中的最小值 | MIN(Price) |
MOD() | 返回一个数除以另一个数的余数 | MOD(21,2) |
PI() | 返回 Pi 值 | PI() |
POW(A,B) | 返回 A 的指数幂 B | POW(2,4) |
POWER(A,B) | 同 POW() | POWER(2,4) |
RADIANS() | 将度数转换为弧度 | RADIANS(180) |
RAND() | 返回 0(包括)和 1(不包括)之间的随机数 | RAND() |
ROUND(A, B) | 将数字四舍五入到指定的小数位数 | ROUND(3.1415926, 2) |
SIGN(A) | 返回数字符号 | SIGN(-23.06) 如果 A > 0,返回1;如果 A = 0,返回0;如果 A < 0,返回 -1 |
SIN() | 返回数字的正弦值 | SIN(2) |
SQRT() | 返回数字的平方根 | SQRT(2) |
SUM() | 计算一组值的总和 | SUM(Price) |
TAN() | 返回数字的正切值 | TAN(1.75) |
TRUNCATE() | 将数字截断为指定的小数位数 | TRUNCATE(135.375, 2) |
Date 函数
函数 | 描述 | 例子 |
ADDDATE(date, INTERVAL value addunit) 或者 ADDDATE(date,days) | 将时间/日期间隔添加到日期,然后返回日期 | ADDDATE("2022-05-29", INTERVAL 10 DAY) 例子中的 DAY 可以换成以下类型 MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH |
ADDTIME(A,B) | 将时间间隔添加到时间/日期时间,然后返回时间/日期时间 | ADDTIME("2022-05-30 09:34:21", "12:02") |
CURTIME() | 返回当前时间,时间格式是 “HH-MM-SS” | CURTIME() |
CURDATE() | 返回当前日期,格式是 “YYYY-MM-DD” | CURDATE() |
CURRENT_DATE() | 返回当前时间,时间格式是 “YYYY-MM-DD” | CURRENT_DATE() |
CURRENT_TIME() | 返回当前时间,时间格式是 “HH-MM-SS” | CURRENT_TIME() |
CURRENT_TIMESTAMP() | 返回当前时间,时间格式是 “YYYY-MM-DD HH:MM:SS” | CURRENT_TIMESTAMP() |
DATE_ADD(date, INTERVAL value addunit) | 将时间/日期间隔添加到日期,然后返回日期 | 参考 ADDDATE() |
DATE_FORMAT(A, B) | 按指定格式化日期 | DATE_FORMAT("2022-05-29", "%Y") 例子中的 “%Y” 可以换成以下类型 %a 星期缩写名称 (Sun to Sat) %b 月份缩写名称 (Jan to Dec) %c 月份数字形式 (0 to 12) %D 单日在月份中缩写 (1st, 2nd, 3rd, ...) %d 单日在月份中数字形式 (01 to 31) %e 单日在月份中数字形式 (0 to 31) %f 微秒显示 (000000 to 999999) %H 小时数显示 (00 to 23) %h 小时数显示 (00 to 12) %I 小时数显示 (00 to 12) %i 分钟数显示 (00 to 59) %j 当年到了第几天 (001 to 366) %k 小时数显示 (0 to 23) %M 月份名称全称 (January to December) %m 月份数字表现形式 (00 to 12) %p AM or PM %r 时间在 12 小时制显示 AM or PM 形式 (hh:mm:ss AM/PM) %S 秒数 (00 to 59) %s 秒数 (00 to 59) %T 时间在 24 小时制显示 (hh:mm:ss) %U 星期天是一周的第一天的星期 (00 to 53) %u 星期一是一周的第一天的星期 (00 to 53) %V 星期天是一周的第一天的星期 (01 to 53). 也可以用 %X %v 星期一是一周的第一天的星期 (01 to 53). 也可以用 %x %W 星期的完整名称 (Sunday to Saturday) %w 显示星期几 Sunday=0 and Saturday=6 %Y 年份为 4 位数字值 %y 年份为 2 位数字值 |
DATE_SUB(date, INTERVAL value addunit) | 从日期中减去时间/日期间隔,然后返回日期 | 参考 ADDDATE() |
EXTRACT(part FROM date) | 从给定日期提取一部分 | EXTRACT(MONTH FROM "2022-05-29") 例子中的 MONTH 可以换成以下类型 MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH |
FROM_DAYS(A) | 从数字日期值返回日期 | FROM_DAYS(105000) |
MAKEDATE() | 返回基于年份和天数值的日期 | MAKEDATE(2022,125) |
MAKETIME() | 返回基于小时,分钟数和秒数的时间值 | MAKETIME(11,23,56) |
NOW() | 同 CURRENT_TIMESTAMP() | NOW() |
SYSDATE() | 同 CURRENT_TIMESTAMP() | SYSDATE() |
LAST_DAY(A) | 提取给定日期该月的最后一天 | LAST_DAY('2020-02-12') |
LOCALTIME() | 同 CURRENT_TIMESTAMP() | LOCALTIME() |
LOCALTIMESTAMP() | 同 CURRENT_TIMESTAMP() | LOCALTIMESTAMP() |
DATE() | 从日期时间表达式中提取日期部分 | DATE("2022-05-28 09:30:00"),返回 2022-05-28 |
TIMEDIFF() | 返回两个时分秒之间的时间,返回也是时分秒的形式 | TIMEDIFF("20:19:11", "12:10:10") |
DATEDIFF(A, B) | 返回两个日期之间的天数 | DATEDIFF("2022-05-28","2022-05-15") |
MICROSECOND() | 返回时分秒中的毫秒数 | MICROSECOND("2022-05-28 09:30:00.000059") |
SECOND() | 返回时分秒中的秒钟数 | SECOND("2022-05-28 09:30:00") |
MINUTE() | 返回时分秒中的分钟数 | MINUTE("2022-05-28 09:30:00") |
HOUR() | 返回时分秒中的小时数 | HOUR("2022-05-28 09:30:00") |
DAY() | 返回年月日中的日数字 | DAY("2022-05-28") |
DAYOFMONTH() | 同DAY() | DAYOFMONTH("2022-05-28") |
WEEK() | 返回该日期是今年的第几个星期 | WEEK("2022-05-28") |
WEEKOFYEAR() | 同WEEK() | WEEKOFYEAR("2022-05-28") |
MONTH() | 返回年月日中的月数字 | MONTH("2022-05-28") |
YEAR() | 返回年月日中的年数字 | YEAR("2022-05-28") |
DAYOFYEAR() | 返回当年度到了第几天 | DAYOFYEAR("2022-05-28") |
DAYNAME() | 返回星期名称 | DAYNAME("2022-05-28") |
MONTHNAME() | 返回月份名称 | MONTHNAME("2022-05-28") |
DAYOFWEEK() | 返回星期数字 | DAYOFWEEK("2022-05-28") 1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday, 7=Saturday |
WEEKDAY | 同DAYOFWEEK() | WEEKDAY("2022-05-28") 0 = Monday, 1 = Tuesday, 2 = Wednesday, 3 = Thursday, 4 = Friday, 5 = Saturday, 6 = Sunday |
YEARWEEK() | 返回年数和今年的第几个星期 | YEARWEEK("2022-05-28") |
TO_DAYS() | 返回日期和年份 0 之间的天数 | TO_DAYS("2022-05-28") |
TIME() | 返回时分秒形式 | TIME("2020-01-05 19:30:10") |
TIMESTAMP() | 根据日期或日期时间值返回一个日期时间值 | TIMESTAMP("2022-05-28", '12:00:00') |
TIME_TO_SEC() | 时分秒转换为秒的形式返回 | TIME_TO_SEC('12:00:00') |
SUBTIME(A,B) | 时间减法 | SUBTIME("2022-05-27 10:24:21", "09:24:21.001125") |
SEC_TO_TIME() | 根据指定的秒数返回时间值(格式为 HH:MM:SS) | SEC_TO_TIME(100) |
QUARTER() | 返回给定日期值的一年中的季度(从 1 到 4 的数字) | QUARTER("2022-05-27") 1-3 月返回 1 4-6 月回归 2 7-9 月返回 3 10 月至 12 月返回 4 |
PERIOD_ADD() | 将指定的月数添加到期间 | PERIOD_ADD(202205,5) |
PERIOD_DIFF(A,B) | 返回两个时期之间的差异 | A 和 B 的日期格式要一致 |
Advanced 函数
函数 | 描述 | 例子 |
BIN() | 返回数字的二进制表示形式,作为字符串值 | BIN(15) |
BINARY | 将值转换为二进制字符串 | BINARY "HELLO" = "hello" |
CAST(A AS B) | 将 A(任何类型的)值转换为指定的数据类型 B | B 涉及的类型如下: DATE DATETIME DECIMAL TIME CHAR NCHAR SIGNED UNSIGNED BINARY |
CONVERT(A, B) | 同 CAST | 同 CAST |
CONV(A, B, C) | 将数字 A 从一个数字进制 B 转换为另一个 C 进制,并将结果作为字符串值返回 | CONV(5, 10, 8) |
COALESCE() | 返回列表中第一个非 NULL 值 | COALESCE(1, NULL, 2, 6,NULL) |
IF() | 如果条件为 TRUE,则返回一个值,如果条件为 FALSE,则返回另一个值 | IF(2<3, 'YES', 'NO') |
USER() | 返回 MySQL 连接的当前用户名和主机名 | USER() |
CURRENT_USER() | 返回服务器用于验证当前客户端的 MySQL 帐户的用户名和主机名 | CURRENT_USER() |
CONNECTION_ID() | 返回当前连接的唯一连接 ID | CONNECTION_ID() |
DATABASE() | 返回当前数据库的名称 | DATABASE() |
LAST_INSERT_ID() | 返回表中已插入或更新的最后一行的 AUTO_INCREMENT id | LAST_INSERT_ID() |
IFNULL(A,B) | 如果 A 是 NULL,则返回B,反之,则返回 A | IFNULL(NULL,'YES') |
ISNULL() | 如果是 NULL,返回1,反之,返回0 | ISNULL(NULL) |
NULLIF(A,B) | 比较 A 和 B,如果 A = B,返回 NULL,反之,返回A | NULLIF(10,20) |
SESSION_USER() | 同 USER() | SESSION_USER() |
SYSTEM_USER() | 同 USER() | SYSTEM_USER() |
VERSION() | 返回当前 MySQL 数据库版本 | VERSION() |
View 语令
在 SQL 中,视图是基于 SQL 语句结果集的虚拟表。
视图包含行和列,就像真实的表一样,视图中的字段是来自数据库中一个或多个真实表的字段。
可以将 SQL 语句和函数添加到视图并呈现数据,就好像数据来自一个表一样。
创建用 CREATE VIEW
CREATE VIEW Stock AS SELECT PriceDay, Country FROM StockStatus WHERE Country = 'USA';
更新用 CREATE OR REPLACE VIEW
CREATE OR REPLACE VIEW Stock AS SELECT PriceDay, Country FROM StockStatus WHERE Country = 'USA';
删除用 DROP VIEW
DROP VIEW Stock;
- 我的微信
- 微信扫一扫加好友
- 我的微信公众号
- 扫描关注公众号