zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    容斥原理学习(Hdu 4135,Hdu 1796)
    ACdream 1112
    CodeChef--Cards, bags and coins
    ACdream 1108(莫队)
    Hdu 2586(LCA)
    CodeChef--EQUAKE
    Hackerrank--Mixing proteins(Math)
    Clash Credenz 2014 Wild Card Round题解
    Codeforces 463D
    CodeChef August Lunchtime 2014 题解
  • 原文地址:https://www.cnblogs.com/zhangtu/p/14343390.html
Copyright © 2011-2022 走看看