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

时间:2017-12-27 21:17:57

标签: mysql sql string

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

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

3 个答案:

答案 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;