我需要查询包含有关产品的信息。产品名称如下所示:
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
等。
您需要反转该值,以便最后一次出现成为第一次出现。
SELECT
TRIM(
LEFT(
a.description,
(LENGTH( a.description) - LOCATE('-', REVERSE(a.description))+1)
)
)
FROM products
这是一个有效的解决方案,但假设您有两个子字段:
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来存储这些子字段,而不是使用连字符分隔的字符串。
您需要使用reverse方法来获取最后一次出现。
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;