我需要查询包含有关产品的信息。产品名称如下所示:
Samsung TV 1500 - LED - USA
Sony 19.2/2.12/12V3/320/AE-EL:SILVER-ITA
以下是我正在使用的内容:
SELECT
TRIM(
LEFT(
a.description,
(LENGTH( a.description) - LOCATE('-', a.description))
)
)
FROM products
但它会Samsung TV 1500
而不是Samsung TV 1500 - LED
。
我需要的是删除最后-USA
,-IND
等
答案 0 :(得分:2)
您需要反转该值,以便最后一次出现成为第一个。
SELECT
TRIM(
LEFT(
a.description,
(LENGTH( a.description) - LOCATE('-', REVERSE(a.description))+1)
)
)
FROM products
答案 1 :(得分:0)
这是一个有效的解决方案,但假设您有两个子字段:
mysql> SELECT TRIM(SUBSTRING_INDEX('Samsung TV 1500 - LED - USA', '-', 2));
+--------------------------------------------------------------+
| TRIM(SUBSTRING_INDEX('Samsung TV 1500 - LED - USA', '-', 2)) |
+--------------------------------------------------------------+
| Samsung TV 1500 - LED |
+--------------------------------------------------------------+
您可能还想考虑使用JSON来存储这些子字段,而不是使用以连字符分隔的字符串。
答案 2 :(得分:0)
您需要使用反向方法来获取最后一次出现。
CREATE TABLE products (description VARCHAR(255) NOT NULL,PRIMARY KEY (description));
INSERT INTO products (description) VALUES ('Samsung TV 1500 - LED - USA');
SELECT TRIM(LEFT(a.description, (LENGTH( a.description) - locate('-', reverse(a.description))))) FROM products as a;