【问题标题】:How to select string between delimiters and insert into other column in MySQL?如何在分隔符之间选择字符串并插入 MySQL 中的其他列?
【发布时间】:2017-06-22 13:08:36
【问题描述】:

假设我在 MySQL 数据库中有一个表,其中包含两列 first_stringsecond_string

first_string 包含这句话:Hello! This is my first test. I like this test.

我想获取分隔符mytest 之间的所有内容(包括分隔符本身)并将其插入second_string

所以second_string 应该是:my first test

使用第一个可用的分隔符很重要:我需要my first test my first test. I like this test

这是我目前所拥有的:

SELECT SUBSTRING(@Text, CHARINDEX('my', @Text), CHARINDEX('test',@text) - CHARINDEX('my', @Text) + Len('test'));

但是我不知道怎么做剩下的。该代码是否总是寻找第一个可用的分隔符?

我希望有人可以帮助我。谢谢!

【问题讨论】:

  • 为什么不只存储“first”和“second”变量并动态创建第一个和第二个字符串?它会节省数据库存储空间,并且更容易实现。
  • 问题是,first_string 已经这样存储了。我需要提取second_string 的内容。完成后,我将删除整个 first_string 列。
  • @forrestmid 你明白我的意思吗?你知道解决办法吗?
  • @forrestmid 不需要优化。我只需要像这样编辑几百行。
  • @forrestmid 这是一个 MySQL/SQL 问题,没有 PHP。抱歉,我删除了PHP 标签。

标签: mysql substring delimiter


【解决方案1】:

你的意思是这样的吗?

mysql> SET @Text='你好!这是我的第一次测试。我喜欢这个测试。'; 查询正常,0 行受影响(0,00 秒)

SET @Text='Hello! This is my first test. I like this test.';

SELECT
    SUBSTRING(@Text, INSTR(@Text,'my')
    , (INSTR(@Text,'test') - INSTR(@Text,'my') + CHAR_LENGTH('test')))
    INTO @result;

SELECT @result;

示例

    mysql> SET @Text='Hello! This is my first test. I like this test.';
    mysql> SELECT
        ->     SUBSTRING(@Text, INSTR(@Text,'my')
        ->     , (INSTR(@Text,'test') - INSTR(@Text,'my') + CHAR_LENGTH('test')))
        ->     INTO @result;
    Query OK, 1 row affected (0,00 sec)

    mysql> SELECT @result;
    +---------------+
    | @result       |
    +---------------+
    | my first test |
    +---------------+
    1 row in set (0,00 sec)

    mysql>

【讨论】:

  • char_length 是比我更好的方法。你得到了我的投票,这是一个 SQL fiddle,你可以修改它来展示这种方法。 sqlfiddle.com/#!9/d94899/1
  • 是的,但是如果在开始分隔符之前已经有结束分隔符,它似乎不起作用。意思是:如果我有Test: Hello! This is my first test. I like this test.,我不会得到任何结果而不是my first test
  • @user7128548 所以在数学运算中你需要让INSTR(@Text,'test')在找到的第一个位而不是整个字符串上执行..
  • @chris85 是的,就是这样。
最近更新 更多