【问题标题】:Creating a MySQL SET's from a string从字符串创建 MySQL SET
【发布时间】:2009-12-07 09:26:08
【问题描述】:

有没有办法从 MySQL 中的一串分隔值创建一个集合?例如:

'the,quick,brown,fox' => 'the','quick','brown','fox'

一种没有位摆弄的逆 EXPORT_SET。

问候

【问题讨论】:

    标签: mysql string set


    【解决方案1】:

    如果您尝试在 IN 语句中使用该集合,而不是拆分字符串,您可以进行如下比较:

    SELECT * FROM `table` WHERE 'the,quick,brown,fox' REGEXP CONCAT('(^|,)','word','(,|$)');
    

    如果您的数据集很大,我不确定这会有多有效,但它可能比读取临时表并从临时表中选择要快。

    【讨论】:

      【解决方案2】:

      在 MySQL 5.1.41 上测试:

      DROP TABLE IF EXISTS n;
      CREATE TEMPORARY TABLE n AS
        SELECT -1 AS N UNION
        SELECT -2 UNION
        SELECT -3 UNION
        SELECT -4 UNION
        SELECT -5;
      
      DROP TABLE IF EXISTS foo;
      CREATE TABLE foo AS
        SELECT 'the,quick,brown,fox' AS csv;
      
      SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(foo.csv, ',', n.n), ',', 1) AS word
      FROM foo JOIN n
        ON (LENGTH(REPLACE(foo.csv, ',', ''))-LENGTH(foo.csv) <= n.n+1);
      

      结果:

      +-------+
      | word  |
      +-------+
      | fox   |
      | brown |
      | quick |
      | the   |
      +-------+
      

      【讨论】:

        【解决方案3】:

        您可以将文本拆分为单独的元素,读入临时表,然后选择结果。

        例如

        http://forums.mysql.com/read.php?60,78776,242420#msg-242420

        【讨论】:

          【解决方案4】:

          FIND_IN_SET 不能解决您的问题吗?

          FIND_IN_SET()

          【讨论】:

          • FIND_IN_SET 非常慢,因为它强制进行全面扫描
          猜你喜欢
          • 2018-07-09
          • 1970-01-01
          • 2023-04-04
          • 2016-10-30
          • 2019-09-02
          • 2021-07-08
          • 2012-11-27
          • 1970-01-01
          • 2021-12-01
          相关资源
          最近更新 更多