将两个不同字符串的部分合并为新字符串

时间:2014-02-24 16:33:36

标签: mysql sql

我在表格中有三列PRODUCTIDPRODUCTNAMEPRODUCTCODE。 我希望插入一个新产品,从其他列

创建PRODUCTID

如何获取PRODUCTNAME的前两个字母和PRODUCTCODE的后四个数字并将其填入PRODUCTID

我不希望在表中复制产品,如果尝试,我希望表保持不变。默认PRODUCTIDDEFAULT

我到目前为止得到了:

INSERT INTO `v1_products` (`PRODUCTNAME`, `PRODUCTNUMBER`) VALUES ("EXAMPLE", "EXAMPLE4444");

UPDATE `v1_products`

SET `PRODUCTID`=(SELECT CONCAT(
    (SELECT LEFT(`PRODUCTNAME`,2)) , (SELECT RIGHT(`PRODUCTNUMBER`,4))))

WHERE `PRODUCTID`= "DEFALT" AND `PRODUCTID`!=`PRODUCTID`

LIMIT 1

1 个答案:

答案 0 :(得分:0)

首先,我建议将PRODUCTID列设置为唯一。这将阻止任何产品具有相同的值。如果您的默认PRODUCTID是“默认”,那么您可能需要在更新ID后执行此操作。

您的UPDATE声明没有问题,除了WHERE条款:

WHERE `PRODUCTID`= "DEFALT" AND `PRODUCTID`!=`PRODUCTID`

"DEFAULT"

中有拼写错误
`PRODUCTID`!=`PRODUCTID`

永远不会成真。

WHERE `PRODUCTID`= "DEFAULT"

应该够了。

以上内容将修复现有产品的ID不正确。现在您应该更改插入内容,以便为每个新产品正确设置PRODUCTID。您只需添加更新语句中使用的CONCAT即可完成此操作:

INSERT INTO `v1_products` (`PRODUCTID`, `PRODUCTNAME`, `PRODUCTNUMBER`) 
VALUES (
    CONCAT(
        LEFT("EXAMPLE",2),
        RIGHT("EXAMPLE4444",4)),
    "EXAMPLE",
    "EXAMPLE4444");

从评论中的讨论中仅举例说明一次列值:

INSERT INTO v1_products (PRODUCTNAME, PRODUCTNUMBER,PRODUCTID) 
VALUES ( 
    "EXAMPLE", 
    "EXAMPLE4444",
    CONCAT( LEFT(PRODUCTNAME,2), RIGHT(PRODUCTNUMBER,4)));