【问题标题】:Remove first word till first space from cell in mysql database [closed]从mysql数据库中的单元格中删除第一个单词直到第一个空格[关闭]
【发布时间】:2015-03-23 00:05:56
【问题描述】:

我在数据库中有一系列字符串,例如“Et25 Silver W Mirror Cut Face Concave”,如果字符串以 ET 开头并且在任意两个数字字符后有空格,我需要删除第一个单词及其后的空格在它之后。谁能帮我做这样的查询?

【问题讨论】:

  • 您想一次性更新所有行吗?
  • 欢迎来到 StackOverflow。你能告诉我们你迄今为止尝试过什么,以及它是如何不起作用的吗?
  • 似乎您需要一个 UPDATE 语句,并为该列分配一个表达式。 "UPDATE mytable SET mycol = expr" 将 expr 替换为合适的表达式,该表达式对 mycol 的现有值进行操作并返回所需的值。我首先在 SELECT 语句中开发和测试表达式,例如“SELECT mycol, expr FROM mytable”,并在运行 UPDATE 之前确保表达式“工作”。
  • 是的,你可以从这个开始:dev.mysql.com/doc/refman/5.0/en/string-functions.html
  • 这确实不是这个网站的运作方式。对代码的请求通常是不受欢迎的(当然,除非发帖人证明了自己的努力。)

标签: php mysql sql regex


【解决方案1】:

以下应该返回你想要的:

select t.*,
       (case when string regexp '^Et[0-9][0-9] '
             then substr(string, 6)
             else string
        end)
from table t;

编辑:

查询的update 形式为:

update table t
    set string = substr(string, 6)
    where string regexp '^Et[0-9][0-9] ';

【讨论】:

  • 我需要使用不选择它的 sql 语句从字符串中删除 et***。
  • 但是如何更新列中的值,因为它是一个选择语句
  • @MuhammadShahzad,如下所示:UPDATE table SET string = SUBSTR(string, 6) WHERE string REGEXP '^Et[0-9][0-9] ';
【解决方案2】:

问:谁能帮我做这样的查询?

答:是的。

似乎您需要一个 UPDATE 语句,并为该列分配一个表达式。 "UPDATE mytable SET mycol = expr" 与 expr 替换为对 mycol 的现有值进行操作并返回所需值的合适表达式。我首先在 SELECT 语句中开发和测试表达式,例如“SELECT mycol, expr FROM mytable”,并在运行 UPDATE 之前确保表达式“工作”。

【讨论】:

    【解决方案3】:

    试试这个查询

    select mid('test hello world',locate(' ','test hello world'),length('test hello world'))
    

    locate : 定位文本中的第一个空格

    length : 获取文本的长度

    mid :选择第一个值(这将是空格后的第一个字母)到第二个值(这将是最后一个字母)之间的单词

    所以现在更新查询可以像

    update a set a=mid(a,locate(' ',a),length(a)) from ...
    

    这是一个测试代码

    create table stackoverflow (test varchar(50));
    insert into stackoverflow values('a b c');
    insert into stackoverflow values('d e f');
    insert into stackoverflow values('g h i');
    SELECT * FROM `stackoverflow`;
    update stackoverflow set test=mid(test,locate(' ',test),length(test));
    SELECT * FROM `stackoverflow`;
    

    这里是结果

    mysql> create table stackoverflow (test varchar(50));
    Query OK, 0 rows affected (0.44 sec)
    
    mysql> insert into stackoverflow values('a b c');
    Query OK, 1 row affected (0.03 sec)
    
    mysql> insert into stackoverflow values('d e f');
    Query OK, 1 row affected (0.07 sec)
    
    mysql> insert into stackoverflow values('g h i');
    Query OK, 1 row affected (0.15 sec)
    
    mysql> SELECT * FROM `stackoverflow`;
    +-------+
    | test  |
    +-------+
    | a b c |
    | d e f |
    | g h i |
    +-------+
    3 rows in set (0.00 sec)
    
    mysql> update stackoverflow set test=mid(test,locate(' ',test),length(test));
    Query OK, 3 rows affected (0.11 sec)
    Rows matched: 3  Changed: 3  Warnings: 0
    
    mysql> SELECT * FROM `stackoverflow`;
    +------+
    | test |
    +------+
    |  b c |
    |  e f |
    |  h i |
    +------+
    3 rows in set (0.00 sec)
    

    【讨论】:

      【解决方案4】:

      类似的东西 选择子字符串(mycol,instr(mycol,''),len(mycol -instr(mycol,'')) 应该的话。 您也可以将第二个 var 设置为字符串的最大长度,这应该可以。

      【讨论】:

        【解决方案5】:
        UPDATE [table] SET [field] = IF(INSTR([field],'Et'),SUBSTR([field],INSTR([field],' ')+1),[field]);
        

        非常粗略的实现。 Gordon 基于 RegEx 的实现可能会更快。

        【讨论】:

          猜你喜欢
          • 2018-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多