【问题标题】:Altering string (Text to column function)更改字符串(文本到列功能)
【发布时间】:2013-08-30 20:51:54
【问题描述】:

我有两张表,如下所示:

+----+----------------+-----------+-----+
| id | Catalog Number | Pack Size | Qty |
+----+----------------+-----------+-----+
|  1 | K353-J353-5    | 5 kg      |   3 |
|  2 | V3532-3        | 3 kg      |   2 |
|  3 | S32-366-10     | 10 kg     |   1 |
+----+----------------+-----------+-----+

+----+----------------+--------------+
| id | Catalog Number | Product Name |
+----+----------------+--------------+
|  1 | V353-J353      | a            |
|  2 | V3532          | b            |
+----+----------------+--------------+

我想加入这两个表,但不同的目录号格式给我带来了麻烦。目录号始终由“-”字符分隔,但可以有 0 或 1 个“-”。

我管理的唯一方法是通过Excel的文本到列功能,SQL中有没有等效的方法?

提前致谢, 迈克

【问题讨论】:

  • 您能否准确说明与哪个目录号匹配?如果一个目录号是另一个目录号的开头,并且较短的目录号可以在两个表中的任何一个中,您要匹配吗?
  • Thomas 在下面发布的公式帮助很大。如果没有 REPLACE 功能,它可以正常工作。它基本上匹配两个目录号,其中一个目录号有一个用破折号分隔的额外子字符串。通过删除结束子字符串,它完美地解决了。谢谢!在我的表格中,目录号的格式与 Jan 的解决方案一样有效。再次感谢!

标签: mysql sql join


【解决方案1】:

试试:

SELECT *
FROM Table1
JOIN Table2 ON Table2.`Catalog Number` LIKE CONCAT(Table1.Catalog Number, '%')

【讨论】:

    【解决方案2】:

    当你JOIN表时,在ON子句中使用MySQL函数是有效的:

    SELECT * FROM
    Table1
    JOIN Table2
    ON REPLACE(Table1.catalog_number, "-", "") = REPLACE(Table2.catalog_number, "-", "")
    

    这将按 V35323 和 V3532-3 的目录号连接列,而不是按 V3532 和 V3532-3 的目录号。根据问题本身,这应该可以解决问题。不过,在查看数据时,我不太确定。

    编辑

    您的问题没有具体说明,但我认为您希望忽略第一个表中的最后一组数字,并将其与第二个表中未更改的目录号匹配。如果这是真的,那么这将起作用:

    SELECT * FROM
    Table1
    JOIN Table2
    ON
    REPLACE( SUBSTR(Table1.catalog_number, 1, LENGTH(Table1.catalog_number) - LENGTH(SUBSTRING_INDEX(Table1.catalog_number, "-", -1)) - 1), "-", "")
    =
    Table2.catalog_number;
    

    这很疯狂,但确实有效:

    mysql>     SELECT * FROM
        ->     Table1
        ->     JOIN Table2
        ->     ON
        ->     REPLACE( SUBSTR(Table1.catalog_number, 1, LENGTH(Table1.catalog_number) - LENGTH(SUBSTRING_INDEX(Table1.catalog_number, "-", -1)) - 1), "-", "")
        ->     =
        ->     Table2.catalog_number;
    +----+----------------+-----------+------+----+----------------+--------------+
    | id | catalog_number | pack_size | qty  | id | catalog_number | product_name |
    +----+----------------+-----------+------+----+----------------+--------------+
    |  2 | V3532-3        | 3 kg      |    2 |  2 | V3532          | b            |
    +----+----------------+-----------+------+----+----------------+--------------+
    1 row in set (0.02 sec)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-12
      • 2021-08-04
      • 2011-01-08
      • 2013-06-15
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多