将整个字符串提取到最后一个分隔符

问题描述 投票:0回答:3

我需要查询包含有关产品的信息。产品名称如下所示:

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等。

mysql sql string
3个回答
2
投票

您需要反转该值,以便最后一次出现成为第一次出现。

SELECT
 TRIM( 
    LEFT(
         a.description, 
        (LENGTH( a.description) - LOCATE('-', REVERSE(a.description))+1) 
    )
)
FROM products

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来存储这些子字段,而不是使用连字符分隔的字符串。


0
投票

您需要使用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;
© www.soinside.com 2019 - 2024. All rights reserved.