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
  • 相关阅读:
    在Ubuntu中通过update-alternatives切换软件版本
    SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具
    mongodb 的使用
    利用grub从ubuntu找回windows启动项
    How to Repair GRUB2 When Ubuntu Won’t Boot
    Redis vs Mongo vs mysql
    java script 的工具
    python 的弹框
    how to use greendao in android studio
    python yield的终极解释
  • 原文地址:https://www.cnblogs.com/zhangtu/p/14343390.html
Copyright © 2011-2022 走看看