gpt4 book ai didi

mysql - 从一个字符串中获取多个子字符串

转载 作者:行者123 更新时间:2023-11-29 06:44:34 25 4
gpt4 key购买 nike

我有一个表,其中包含如下列:"String""Another"simple "string" 等。我想创建新表,其中"" 中的每个单词都在单独的行中。

我试过做 here ,但问题是每行“正确”单词的数量不同,它们可能位于字符串中的每个位置。

最佳答案

用SQL拆分字符串很别扭。通常,SQL 将每个标量值视为不可约。如果您尝试使用 SQL 表达式来做一些不同的事情,感觉就像您在用脚打字。

我不会用 SQL 解决这个问题。我会用 PHP、Perl 或 Python 编写脚本从数据库中提取数据,使用我的脚本语言提供的强大的字符串操作功能,然后将结果插入数据库。


回复你的评论:

我能想到的唯一纯 MySQL 解决方案是写一个 stored procedure包含一个 WHILE 循环,迭代地提取引用的单词并减少字符串,直到其中没有引用的单词。

换句话说,这种循环方法看起来像下面的伪代码:

WHILE LOCATE('"', STRING) > 0
SET WORD := SUBSTRING_INDEX(...)
INSERT INTO OTHER_TABLE VALUES (WORD)
SET STRING := REPLACE(STRING, '"WORD"', '')
END

这些操作中的每一个都可以通过 MySQL 函数实现。

  • 您可以测试一个字符串以查看它是否包含引号:

    mysql> select locate('"', 'the "quoted" word');
    +-------------------------------------+
    | locate('"', 'the "quoted" word', 1) |
    +-------------------------------------+
    | 5 |
    +-------------------------------------+
  • 您可以从字符串中找到第一个引用的单词:

    mysql> select substring_index(substring_index('the "quoted" word', '"', 2), '"', -1);
    +------------------------------------------------------------------------+
    | substring_index(substring_index('the "quoted" word', '"', 2), '"', -1) |
    +------------------------------------------------------------------------+
    | quoted |
    +------------------------------------------------------------------------+
  • 您可以从字符串中删除带引号的单词:

    mysql> select replace('the "quoted" word', concat('"', 'quoted', '"'), '');
    +--------------------------------------------------------------+
    | replace('the "quoted" word', concat('"', 'quoted', '"'), '') |
    +--------------------------------------------------------------+
    | the word |
    +--------------------------------------------------------------+

我会把最后的程序编码留给你。

关于mysql - 从一个字符串中获取多个子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com