牛客SQL进阶:【字符串的切割、截取、删除、替换】+【窗口函数】

2023-11-07

本文总结了牛客SQL刷题:非技术快速入门的进阶知识,阅读本文可以轻松解决这个系列下的难题。



字符串的切割、截取、删除、替换

字符串切割

substring_index()可以按照给定的分隔符对字符串进行切割。其语法为:

substring_index(str, delim, count)

参数如下:

  • str:需要拆分的字符串
  • delim:分隔符,通过某字符进行拆分
  • count:当 count为正数,取第n个分隔符之前的所有字符; 当count为负数,取倒数第n个分隔符之后的所有字符。

例子:

mysql> select substring_index('www.wikidm.cn', '.', 1);
+------------------------------------------+
| substring_index('www.wikidm.cn', '.', 1) |
+------------------------------------------+
| www                                      |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> select substring_index('www.wikidm.cn', '.', 2);
+------------------------------------------+
| substring_index('www.wikidm.cn', '.', 2) |
+------------------------------------------+
| www.wikidm                               |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> select substring_index('www.wikidm.cn', '.', 3);
+------------------------------------------+
| substring_index('www.wikidm.cn', '.', 3) |
+------------------------------------------+
| www.wikidm.cn                            |
+------------------------------------------+
1 row in set (0.00 sec)

若是count为负呢?看下面:

mysql> select substring_index('www.wikidm.cn', '.', -1);
+-------------------------------------------+
| substring_index('www.wikidm.cn', '.', -1) |
+-------------------------------------------+
| cn                                        |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select substring_index('www.wikidm.cn', '.', -2);
+-------------------------------------------+
| substring_index('www.wikidm.cn', '.', -2) |
+-------------------------------------------+
| wikidm.cn                                 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select substring_index('www.wikidm.cn', '.', -3);
+-------------------------------------------+
| substring_index('www.wikidm.cn', '.', -3) |
+-------------------------------------------+
| www.wikidm.cn                             |
+-------------------------------------------+
1 row in set (0.00 sec)

也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容;相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容。

如果要中间的的wikidm怎么办?很简单,从左数第二个分隔符的左边全部,再从右数的第一个分隔符的右边即可。

mysql> select substring_index(substring_index('www.wikidm.cn', '.', 2),'.', -1);
+-------------------------------------------------------------------+
| substring_index(substring_index('www.wikidm.cn', '.', 2),'.', -1) |
+-------------------------------------------------------------------+
| wikidm                                                            |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)

现在来一个复杂一点的例子,也就是题目:SQL30 统计每种性别的人数

题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个性别的用户分别有多少参赛者,请取出相应结果。
image.png

方法一:使用substring_index把性别取出来就行了。

select
  substring_index(profile, ',', -1) as gender,
  count(*) as number
from
  user_submit
group by
  gender;

方法二:模糊匹配(like)

select
  case
    when profile like '%female' then 'female'
    when profile like '%male' then 'male'
  end as gender,
  count(*) as number
from
  user_submit
group by
  gender;

字符串截取

left()

从左边开始截取字符串,其语法为:

left(str, len)

参数说明:

  • str:被截取的字符串
  • len:正整数,表示截取字符串从最左边开始到第len位的值。

例子:

mysql> select left('4794,3536,3565,7854', 5);
+--------------------------------+
| left('4794,3536,3565,7854', 5) |
+--------------------------------+
| 4794,                          |
+--------------------------------+
1 row in set (0.00 sec)

right()left()一样,只是从右边开始截取字符串。例如:

mysql> select right('4794,3536,3565,7854', 5);
+---------------------------------+
| right('4794,3536,3565,7854', 5) |
+---------------------------------+
| ,7854                           |
+---------------------------------+
1 row in set (0.00 sec)

substring()

语法格式:

substring(str, pos, len)

参数说明:

  • str:被截取的字符串
  • pos:从第几位开始截取,当pos为正数时,表示从字符串开始第pos位开始取,直到结束;当pos为负数时,表示从字符串倒数第pos位开始取,直到结束。
  • len:表示取几个字符。

例子:从第3个字符开始获取字符串:

mysql> select substring('4794,3536,3565,7854', 3);
+-------------------------------------+
| substring('4794,3536,3565,7854', 3) |
+-------------------------------------+
| 94,3536,3565,7854                   |
+-------------------------------------+
1 row in set (0.00 sec)

从倒数第2个字符开始获取字符串:

mysql> select substring('4794,3536,3565,7854', -2);
+--------------------------------------+
| substring('4794,3536,3565,7854', -2) |
+--------------------------------------+
| 54                                   |
+--------------------------------------+
1 row in set (0.00 sec)

从字符串的第 4 个字符位置开始取,只取 2 个字符。

mysql> select substring('4794,3536,3565,7854', 4, 2);
+----------------------------------------+
| substring('4794,3536,3565,7854', 4, 2) |
+----------------------------------------+
| 4,                                     |
+----------------------------------------+
1 row in set (0.00 sec)

从字符串的倒数第 4 个字符位置开始取,只取 2 个字符。

mysql> select substring('4794,3536,3565,7854', -4, 2);
+-----------------------------------------+
| substring('4794,3536,3565,7854', -4, 2) |
+-----------------------------------------+
| 78                                      |
+-----------------------------------------+
1 row in set (0.00 sec)

注意:在函数substring()中, pos可以是负值,但len不能取负值。

字符串替换

替换字符串,其语法为:

replace(str, from_str, to_str)

参数说明:

  • str:需要进行替换的字符串
  • from_str:需要被替换的字符串
  • to_str:需要替换的字符串

例子:将分隔符",“逗号替换为”"。

mysql> select replace('4794,3536,3565,7854', ',', '');
+-----------------------------------------+
| replace('4794,3536,3565,7854', ',', '') |
+-----------------------------------------+
| 4794353635657854                        |
+-----------------------------------------+
1 row in set (0.00 sec)

字符串删除

删除字符串中的某个字段,其语法为:

trim('被删除字段' from 列名)

举个例子,下面代码来自:SQL31 提取博客URL中的用户名。原来的数据为:

mysql> select * from user_submit;
+----+-----------+----------------------+-----------------------+
| id | device_id | profile              | blog_url              |
+----+-----------+----------------------+-----------------------+
|  1 |      2138 | 180cm,75kg,27,male   | http:/url/bisdgboy777 |
|  1 |      3214 | 165cm,45kg,26,female | http:/url/dkittycc    |
|  1 |      6543 | 178cm,65kg,25,male   | http:/url/tigaer      |
|  1 |      4321 | 171cm,55kg,23,female | http:/url/uhsksd      |
|  1 |      2131 | 168cm,45kg,22,female | http:/url/sysdney     |
+----+-----------+----------------------+-----------------------+
5 rows in set (0.00 sec)

下面通过删除每个链接中的公共部分来提取用户名:

mysql> select trim('http:/url/' from blog_url) from user_submit;
+----------------------------------+
| trim('http:/url/' from blog_url) |
+----------------------------------+
| bisdgboy777                      |
| dkittycc                         |
| tigaer                           |
| uhsksd                           |
| sysdney                          |
+----------------------------------+
5 rows in set (0.00 sec)

字符串长度

获取字符串的长度。其语法为:

length(str)

参数说明:

  • str:需要计算长度的字符串

例子:

mysql> select length('4794,3536,3565,7854');
+-------------------------------+
| length('4794,3536,3565,7854') |
+-------------------------------+
|                            19 |
+-------------------------------+
1 row in set (0.00 sec)

反转字符串

反转字符串,其语法为:

reverse(str)

例如:

mysql> select reverse('12345');
+------------------+
| reverse('12345') |
+------------------+
| 54321            |
+------------------+
1 row in set (0.00 sec)

字符串位置

返回子串substr在字符串 str中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;其语法为:

locate(substr, str)

例子:

mysql> select locate('2', '385295502');
+--------------------------+
| locate('2', '385295502') |
+--------------------------+
|                        4 |
+--------------------------+
1 row in set (0.00 sec)

窗口函数

窗口函数的作用:在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:

  • 排名问题:每个部门按业绩来排名
  • topN问题:找出每个部门排名前N的员工进行奖励

面对这类需求,就需要使用sql的高级功能窗口函数。

窗口函数也称为OLAP函数,意思是对数据库数据进行实时分析处理。窗口函数就是为了实现OLAP而添加的标准SQL功能。

窗口函数语法:其中[]中的内容可以省略

<窗口函数> over ([partition by <列清单>]
                        order by <排序用列清单>)

简单来说,窗口函数有以下功能:

  1. 同时具有分组和排序的功能
  2. 不减少原表的行数

针对第二点,可以解释为啥有了group byorder by还需要用窗口函数。原因在于group by分组汇总后改变了表的行数,一行只有一个类别。而partiition byrank函数不会减少原表中的行数。例如下面统计每个班级的人数。
image.png

窗口函数大体可以分为以下两种:

  1. 能够作为窗口函数的聚合函数(sum,avg,count,max,min)
  2. rank,dense_rank,row_number等专用窗口函数。

下面简单介绍一下这些函数的基本使用方法。

专用窗口函数

专用窗口函数主要有rankdense_rankrow_number。下面先来讲讲rank函数。

rank函数是用来计算记录排序的函数。

mysql> select * from user_profile;
+----+-----------+--------+------+--------------+------+-----------------------+--------------+------------+
| id | device_id | gender | age  | university   | gpa  | active_days_within_30 | question_cnt | answer_cnt |
+----+-----------+--------+------+--------------+------+-----------------------+--------------+------------+
|  1 |      2138 | male   |   21 | 北京大学     |  3.4 |                     7 |            2 |         12 |
|  2 |      3214 | male   | NULL | 复旦大学     |    4 |                    15 |            5 |         25 |
|  3 |      6543 | female |   20 | 北京大学     |  3.2 |                    12 |            3 |         30 |
|  4 |      2315 | female |   23 | 浙江大学     |  3.6 |                     5 |            1 |          2 |
|  5 |      5432 | male   |   25 | 山东大学     |  3.8 |                    20 |           15 |         70 |
|  6 |      2131 | male   |   28 | 山东大学     |  3.3 |                    15 |            7 |         13 |
|  7 |      4321 | male   |   28 | 复旦大学     |  3.6 |                     9 |            6 |         52 |
+----+-----------+--------+------+--------------+------+-----------------------+--------------+------------+
7 rows in set (0.00 sec)
mysql> select device_id, university, gpa, rank() over (partition by university order by gpa) as ranking from user_profile;
+-----------+--------------+------+---------+
| device_id | university   | gpa  | ranking |
+-----------+--------------+------+---------+
|      6543 | 北京大学     |  3.2 |       1 |
|      2138 | 北京大学     |  3.4 |       2 |
|      4321 | 复旦大学     |  3.6 |       1 |
|      3214 | 复旦大学     |    4 |       2 |
|      2131 | 山东大学     |  3.3 |       1 |
|      5432 | 山东大学     |  3.8 |       2 |
|      2315 | 浙江大学     |  3.6 |       1 |
+-----------+--------------+------+---------+
7 rows in set (0.00 sec)

参数解释:

  • partition by能够设定排序的对象范围,类似于group by语句,这里就是以university划分排序范围。
  • order by能够指定哪一列,何种顺序进行排序。也可以通过ascdesc来指定升序降序。

窗口函数兼具分组和排序两种功能。通过partition by分组后的记录集合称为窗口。

要注意的是partition by不是窗口函数所必须的,比如:

mysql> select device_id, university, gpa, rank() over (order by gpa) as ranking from user_profile;
+-----------+--------------+------+---------+
| device_id | university   | gpa  | ranking |
+-----------+--------------+------+---------+
|      6543 | 北京大学     |  3.2 |       1 |
|      2131 | 山东大学     |  3.3 |       2 |
|      2138 | 北京大学     |  3.4 |       3 |
|      2315 | 浙江大学     |  3.6 |       4 |
|      4321 | 复旦大学     |  3.6 |       4 |
|      5432 | 山东大学     |  3.8 |       6 |
|      3214 | 复旦大学     |    4 |       7 |
+-----------+--------------+------+---------+
7 rows in set (0.00 sec)

如果省略了partition by,没有进行范围的划分,就会直接对全部的数据进行排序。

但如果这样用的话就失去了窗口函数的功能,所以一般不要这么使用。

专用窗口函数rank, dense_rank, row_number有什么区别呢?

select *,
   rank() over (order by 成绩 desc) as ranking,
   dense_rank() over (order by 成绩 desc) as dese_rank,
   row_number() over (order by 成绩 desc) as row_num
from 班级表

得到如下结果:
image.png
从上面的结果可以看出:

  • rank函数:这个例子中是5位,5位,5位,8位,也就是如果有并列名次的行,会占用下一名次的位置。比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,4。
  • dense_rank函数:这个例子中是5位,5位,5位,6位,也就是如果有并列名次的行,不占用下一名次的位置。比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,2。
  • row_number函数:这个例子中是5位,6位,7位,8位,也就是不考虑并列名次的情况。比如前3名是并列的名次,排名是正常的1,2,3,4。

这三个函数的区别如下:
image.png

注意:在上述的这三个专用窗口函数中,函数后面的括号不需要任何参数,保持()空着就可以。

聚合函数

聚和窗口函数和上面的专用窗口函数用法完全相同,只需要把聚合函数写在窗口函数的位置即可,但是函数后面括号里面不能为空,需要指定聚合的列名。

还是用上面的数据,来看看下面的结果:

mysql> select device_id, university, gpa, sum(gpa) over (order by device_id) as sum_gpa, max(gpa) over (order by device_id) as max_gpa from user_profile;
+-----------+--------------+------+--------------------+--------------------+
| device_id | university   | gpa  | sum_gpa            | max_gpa            |
+-----------+--------------+------+--------------------+--------------------+
|      2131 | 山东大学     |  3.3 |  3.299999952316284 |  3.299999952316284 |
|      2138 | 北京大学     |  3.4 |  6.700000047683716 | 3.4000000953674316 |
|      2315 | 浙江大学     |  3.6 | 10.299999952316284 | 3.5999999046325684 |
|      3214 | 复旦大学     |    4 | 14.299999952316284 |                  4 |
|      4321 | 复旦大学     |  3.6 | 17.899999856948853 |                  4 |
|      5432 | 山东大学     |  3.8 | 21.699999809265137 |                  4 |
|      6543 | 北京大学     |  3.2 | 24.899999856948853 |                  4 |
+-----------+--------------+------+--------------------+--------------------+
7 rows in set (0.00 sec)

聚合函数sum在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。比如device_id为3214的记录,在使用sum窗口函数后的结果,是对2131、2138、2315和3214的gpa求和,若是6543,则结果是所有成绩的求和,以此类推。

不仅是sum求和,平均、计数、最大最小值,也是同理,都是针对自身记录、以及自身记录之上的所有数据进行计算。如果想要知道所有人成绩的总和、平均等聚合结果,看最后一行即可。

聚合函数作为窗口函数,可以在每一行的数据里直观的看到,截止到本行数据,统计数据是多少(最大值、最小值等)。同时可以看出每一行数据,对整体统计数据的影响。

进阶题目

字符串拆分(有分隔符)

数据库中num字段值为:'4794,3536,3565,7854',现在需要将一行数据变成多行,也就是下面的样子:

+------+
| num  |
+------+
| 7654 |
| 7698 |
| 7782 |
| 7788 |
+------+
  1. 首先获取最后需被拆分成多少个字符串,利用 mysql 库的help_topic表的help_topic_id来模拟遍历第n个字符串,因为help_topic_id是自增的,当然也可以用其他表的自增字段辅助。help_topic_id的使用见下面:
mysql> select help_topic_id from mysql.help_topic where help_topic_id < 5;
+---------------+
| help_topic_id |
+---------------+
|             0 |
|             1 |
|             2 |
|             3 |
|             4 |
+---------------+
5 rows in set (0.00 sec)
  1. 通过如下的函数,求得,的个数:
mysql> select length('7654,7698,7782,7788') - length(replace('7654,7698,7782,7788', ',', '')) as num;
+------+
| num  |
+------+
|    3 |
+------+
1 row in set (0.00 sec)

也就是说,现在有三个逗号,那么就有四个字符串需要被分割。

  1. 根据逗号拆分字符串,此处利用substring_index()函数提取每部分的数字,最后把结果赋值给num字段。
select substring_index(substring_index('7654,7698,7782,7788', ',', help_topic_id + 1), ',', -1) as num;
  1. 将第三步的的help_topic_id限制在要提取的字符串个数内,也就是第二步,就可以得到这道题的最终结果了。
mysql> select substring_index(substring_index('7654,7698,7782,7788', ',', help_topic_id + 1), ',', -1) as num from mysql.help_topic where help_topic_id < length('7654,7698,7782,7788') - length(replace('7654,7698,7782,7788', ',', '')) + 1;
+------+
| num  |
+------+
| 7654 |
| 7698 |
| 7782 |
| 7788 |
+------+
4 rows in set (0.00 sec)

字符串拆分(无分隔符)

数据库中num字段值为:'123456',现在需要将一行数据变成多行,也就是下面的样子:

+------+
| num  |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+

这道题和上一道题其实是一个思路,既然现在没有分隔符了,那就一个一个数的取,使用left配合substring函数就可以做到,如下:

mysql> select left(substring('123456', help_topic_id + 1), 1) as num from mysql.help_topic where help_topic_id < length('123456');
+------+
| num  |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+
6 rows in set (0.00 sec)

SQL32 截取出年龄

现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个年龄的用户分别有多少参赛者,请取出相应结果。
image.png

select
  substring_index(substring_index(profile, ',', -2), ',', 1) as age,
  count(*)
from
  user_submit
group by
  age;

SQL33 找出每个学校GPA最低的同学

现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。
image.png

方法一:第一种方式是用group by把学校分组,然后计算得到每个学校最低gpa,再去找这个学校里和这个gpa相等的同学ID。

注意这样如果最低gpa对应多个同学,都会输出。

select
  a.device_id,
  a.university,
  a.gpa
from
  user_profile a
where
  gpa in (
    select
      min(b.gpa)
    from
      user_profile b
    where
      a.university = b.university
  )
order by
  a.university;

方法二:用内连接将单表分为两个表,再将两个表进行连接进行查询。

select
  a.device_id,
  a.university,
  a.gpa
from
  user_profile a
  join (
    select
      university,
      min(gpa) as gpa
    from
      user_profile
    group by
      university
  ) as u
  on a.university = u.university and a.gpa = u.gpa
  order by a.university;

方法三:借助all函数。

select
  a.device_id,
  a.university,
  a.gpa
from
  user_profile a
where
  gpa <= all(
    select
      b.gpa
    from
      user_profile b
    where
      a.university = b.university
  )
order by
  a.university;

方法四:窗口函数

select
  device_id,
  university,
  gpa
from
  (
    select
      *,
      row_number() over (partition by university order by gpa) as rn
    from
      user_profile
  ) as univ_min
where
  rn = 1
order by
  university;

SQL29 计算用户的平均次日留存率

现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。
image.png

方法一:表里的数据可以看作是全部第一天来刷题了的,那么我们需要构造出第二天来了的字段,因此可以考虑用left join把第二天来了的拼起来,限定第二天来了的可以用date_add(date1, interval 1 day)=date2筛选,并用device_id限定是同一个用户。

可以count(date1)得到左表全部的date记录数作为分母,count(date2)得到右表关联上了的date记录数作为分子,相除即可得到平均概率。

select
  count(date2) / count(date1) as avg_ret
from
  (
    select
      distinct q.device_id,
      q.date as date1,
      p.date as date2
    from
      question_practice_detail as q
      left join(
        select
          distinct device_id,
          date
        from
          question_practice_detail
      ) as p 
      on q.device_id = p.device_id
      and date_add(q.date, interval 1 day) = p.date
  )as id_last_next_date;

方法二:用lead函数将同一用户连续两天的记录拼接起来。先按用户分组partition by device_id,再按日期升序排序order by date,再两两拼接(最后一个默认和null拼接),即lead(date) over (partition by device_id order by date)

检查date2date1的日期差是不是为1,是则为1(次日留存了),否则为0(次日未留存),取avg即可得平均概率。

select
  avg(if(datediff(date2, date1) = 1, 1, 0)) as avg_ret
from
  (
    select
      distinct device_id,
      date as date1,
      lead(date) over (
        partition by device_id
        order by
          date
      ) as date2
    from
      (
        select
          distinct device_id,
          date
        from
          question_practice_detail
      ) as uniq_id_date
  ) as id_last_next_date;

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛客SQL进阶:【字符串的切割、截取、删除、替换】+【窗口函数】 的相关文章

  • MySQL 通过 current_timestamp 选择上个月的数据

    直到今天 当我使用 MySQL 并需要对日期 时间执行操作时 我使用带有 unix 时间戳的 int 列 没有出现任何问题 但今天在阅读了一些指南后 我决定默认使用 current timestamp 测试时间戳列 所以我感兴趣如何按列选择
  • 在 MySQL 中对整数字段运行带引号的数字(字符串)查询时会发生哪些复杂情况

    在 SQL 中 不应引用整数 因为如果引用 它将是一个字符串 但我很好奇如果我这样做会出现什么问题 并发症 例如 SELECT FROM table WHERE id 1 正确的 vs SELECT FROM table WHERE id
  • MySQL 8 用逗号分割字符串并将其转换为JSON ARRAY

    我有以下字符串 a b c d 我想将它转换成一个 json 数组 像这样 a b c d MySQL 8 有什么函数可以实现这个功能吗 Try SELECT CAST CONCAT REPLACE a b c d AS JSON See
  • WordPress:wpdb->插入与wpdb->准备(wpdb->查询(“INSERT

    我想知道 WordPress 的插入功能是否也向数据添加斜杠 如果没有 准备查询方法似乎可以更好地防止 SQL 注入 我尝试在 codex api 中查找问题 然而 它似乎没有记录 谢谢 这个问题有点老了 自从提出这个问题以来 法典可能已经
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • mysql转储到derby

    我正在使用 derby 在 eclipse 中进行开发 是否可以从 MySQL 转储表并以某种方式将其用于 derby 我知道 ddl 和 dml 对于两个 dbms 来说是不同的 但我正在寻找一种除了转储 导出之外的合适方法 我可以找到两
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • 在 Hibernate 中创建 UPDATE RETURNING 查询

    在 Oracle 中 我们可以创建一个更新查询 该查询将使用 RETURNING 子句返回更新的记录 Hibernate中有类似的功能吗 除了数据库生成的值之外 Hibernate 显然不需要返回更新的实例 因为对象传递给Session s
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • mysql 中的二进制、十六进制和八进制值

    我对在 mysql 数据库中使用二进制 十六进制和八进制系统非常感兴趣 首先 请给我一个建议 为什么我们在存储信息时需要它们 因为信息太多 或者为什么 另外 哪种类型的值必须存储在标记系统中 另外这里还有像 这是例子 gt SELECT 5
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • 如何通过Elasticsearch模糊匹配电子邮件或电话?

    我想通过 Elasticsearch 对电子邮件或电话进行模糊匹配 例如 匹配所有以以下结尾的电子邮件 gmail com or 匹配所有电话开头136 我知道我可以使用通配符 query wildcard email gmail com
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v

随机推荐