Skip to content

MySQL特有函数

755字约3分钟

数据库mysql

2024-10-24

MySQL特有函数

last_insert_id() 获取最后一次插入数据的id

select last_insert_id() from dump;

获取最后一次插入数据时的id(批量插入后为第一条的记录)

例:

 select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                0 |
+------------------+
1 row in set (0.00 sec)

日期时间函数

获取日期

date(now())

curdate()

current_date()

获取时间

current_time()

time(now())

mysql> select now(),date(now()),curdate(),
current_date(),time(now()),current_time();
+---------------------+-------------+------------+----------------+-------------+----------------+
| now()               | date(now()) | curdate()  | current_date() | time(now()) | current_time() |
+---------------------+-------------+------------+----------------+-------------+----------------+
| 2021-08-17 21:09:12 | 2021-08-17  | 2021-08-17 | 2021-08-17     | 21:09:12    | 21:09:12       |
+---------------------+-------------+------------+----------------+-------------+----------------+
1 row in set (0.00 sec)
日期增加函数

date_sub(日期时间,interval,数值,类型)

例:date_sub(now(),interval 24 hour)表示当前日期时间的24小时前

mysql> select now(),date_sub(now(),interval 24 hour);
+---------------------+----------------------------------+
| now()               | date_sub(now(),interval 24 hour) |
+---------------------+----------------------------------+
| 2021-08-17 21:10:40 | 2021-08-16 21:10:40              |
+---------------------+----------------------------------+
1 row in set (0.00 sec)
日期格式化

date_format(日期,'日期格式') 输出日期为指定格式

例:

mysql> select date_format(now(),'%Y-%m-%d');
+-------------------------------+
| date_format(now(),'%Y-%m-%d') |
+-------------------------------+
| 2021-08-17                    |
+-------------------------------+
1 row in set (0.00 sec)
计算天数

to_days(日期) 计算日期与公元元年之间的天数

例:

mysql> select to_days(now());
+----------------+
| to_days(now()) |
+----------------+
|         738384 |
+----------------+
1 row in set (0.00 sec)

dayofyear(日期) 计算日期年份的1月1日到日期之间的天数

例:

mysql> select dayofyear(now());
+------------------+
| dayofyear(now()) |
+------------------+
|              229 |
+------------------+
1 row in set (0.00 sec)
取日期指定结果

year(日期) 取年份

quarter(日期) 取季度

month(日期) 取月份

week() 取日期在当前年份的第几周

dayofweek() 取日期在本周的第几天(以周日为0开始)

day() 取日期的日

hour() 取时间的小时

minute() 取时间的分钟

second() 取时间的秒数

例:

mysql> select year(now()) 年份,quarter(now()) 季度,month(now()) 月份,day(now()) 日,
    -> week(now()) 周次,dayofweek(now()) 星期,hour(now()) 小时,minute(now()) 分钟,second(now()) 秒;
+------+------+------+------+------+------+------+------+------+
| 年份 | 季度 | 月份 | 日   | 周次 | 星期 | 小时 | 分钟 | 秒   |
+------+------+------+------+------+------+------+------+------+
| 2021 |    3 |    8 |   17 |   33 |    3 |   22 |    8 |   31 |
+------+------+------+------+------+------+------+------+------+
1 row in set (0.00 sec)

多重查询

子查询:存在于另外一个SQL语句中被小括号包着的,用作主查询的查询条件

主查询:相对于子查询来说的,在外面直接执行的查询语句

单行多列子查询

成对比较,例:

SELECT id,first_name,manager_id,dept_id,title
FROM s_emp
WHERE (dept_id,title,manager_id)=(
SELECT dept_id,title,manager_id FROM s_emp
WHERE lower(first_name)='ben'
);

主查询条件有几列,子查询结果就有几列,并一一对应

多行子查询(多行单列)

主查询条件在子查询结果集合中

例:

SELECT * FROM emp
WHERE job NOT IN(
SELECT job FROM emp
WHERE deptno=20
);
关联子查询(相关子查询)

子查询中使用了外部查询中的表或列,则这个子查询与外部查询是相关的

例:

SELECT * FROM emp e
WHERE EXISTS ( SELECT * FROM emp p WHERE lower(p.ename) = 'smith' AND p.deptno = e.deptno );

在子查询中用到了主查询的表

MySQL连接时设置字符集

mysql -u用户名 -p --defaule-charset=utf8mb4	#不认识
mysql -u用户名 -p --defaule-charscter-set=utf8mb4

设置连接时字符集为utf8mb64,临时设置