mysql复习(2):replace、substr、group_concat

1.replace函数

       语法:replace(object,search,replace)

       tips:object可以是字段名或任意字符串

1.2 replace into语句

       语法:replace into table( col1, col2, col3 ) values ( val1, val2, val3 )

       tips:如果使用replace into插入的数据的唯一索引或者主键索引与之前的数据有重复的情况,将会删除原先的数据,然后再进行添加。并且要将所有字段的值写出,否则将置为空。

1.3 牛客网笔试题实例

       将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现。

 1 CREATE TABLE titles_test (
 2    id int(11) not null primary key,
 3    emp_no  int(11) NOT NULL,
 4    title  varchar(50) NOT NULL,
 5    from_date  date NOT NULL,
 6    to_date  date DEFAULT NULL);
 7 
 8 insert into titles_test values
 9 ('1', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
10 ('2', '10002', 'Staff', '1996-08-03', '9999-01-01'),
11 ('3', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01'),
12 ('4', '10004', 'Senior Engineer', '1995-12-03', '9999-01-01'),
13 ('5', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
14 ('6', '10002', 'Staff', '1996-08-03', '9999-01-01'),
15 ('7', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01');

解法一:

1 UPDATE titles_test SET emp_no = REPLACE(emp_no,10001,10005) WHERE id = 5

解法二:

1 REPLACE INTO titles_test VALUES (5, 10005, 'Senior Engineer', '1986-06-26', '9999-01-01')

2 substr函数

       substr(X,Y,Z) 或 substr(X,Y) 函数。

       其中X是要截取的字符串。

       Y是字符串的起始位置(注意第一个字符的位置为1,而不为0),取值范围是±(1~length(X)),当Y等于length(X)时,则截取最后一个字符;当Y等于负整数-n时,则从倒数第n个字符处截取。

       Z是要截取字符串的长度,取值范围是正整数,若Z省略,则从Y处一直截取到字符串末尾;若Z大于剩下的字符串长度,也是截取到字符串末尾为止。

2.1 牛客网实例

       获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列。

1 CREATE TABLE `employees` (
2 `emp_no` int(11) NOT NULL,
3 `birth_date` date NOT NULL,
4 `first_name` varchar(14) NOT NULL,
5 `last_name` varchar(16) NOT NULL,
6 `gender` char(1) NOT NULL,
7 `hire_date` date NOT NULL,
8 PRIMARY KEY (`emp_no`));

       解法:

1 select first_name from employees
2 order by substr(first_name, -2);

3 group_concat函数

       group_concat(X,Y),其中X是要连接的字段,Y是连接时用的符号,可省略,默认为逗号。此函数必须与 GROUP BY 配合使用。

3.1 牛客网实例

       按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees

1 CREATE TABLE `dept_emp` (
2 `emp_no` int(11) NOT NULL,
3 `dept_no` char(4) NOT NULL,
4 `from_date` date NOT NULL,
5 `to_date` date NOT NULL,
6 PRIMARY KEY (`emp_no`,`dept_no`));

       输出格式:

dept_no

employees

d001 10001,10002
d002 10006
d003 10005

       解法:

1 select dept_no, group_concat(emp_no) as employees
2 from dept_emp
3 group by dept_no

 

posted @ 2021-01-29 10:08  章土  阅读(182)  评论(0编辑  收藏  举报