改变字符串(文本到列函数)

时间:2013-08-27 22:52:12

标签: mysql sql join

我有两个表,如下所示:

+----+----------------+-----------+-----+
| 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中是否有相同的方法?

提前致谢, 麦克

2 个答案:

答案 0 :(得分:1)

当你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)

答案 1 :(得分:0)

尝试:

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