MySQL,如何获取具有最高后缀的字符串

时间:2018-12-07 16:56:36

标签: php mysql sql

我的桌子是:

docs

查询后: SELECT * FROM `table` WHERE `identifier` LIKE '000123_%'

我得到:

enter image description here

如何通过查询获得具有最大后缀的行,即000123_ 5

4 个答案:

答案 0 :(得分:1)

为什么不这样在数据库中创建功能SPLIT_STRING:

CREATE FUNCTION `SPLIT_STRING`(
    str VARCHAR(255) ,
    delim VARCHAR(12) ,
    pos INT
) RETURNS VARCHAR(255) CHARSET utf8 RETURN REPLACE(
    SUBSTRING(
        SUBSTRING_INDEX(str , delim , pos) ,
        CHAR_LENGTH(
            SUBSTRING_INDEX(str , delim , pos - 1)
        ) + 1
    ) ,
    delim ,
    ''
);

然后您可以从查询中呼叫她以获取最后一个字符:

-- Example table 
CREATE TABLE `test`(
    `keywords` VARCHAR(255) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO `test`(`keywords`)
VALUES
    (
        'keyword 1,keyword 2, keyword 3,     keyword 4'
    );

-- Example query
SELECT
    -- keyword 1
    SPLIT_STRING(`keywords`,',',1) AS keyword_1,
    -- keyword 4, NOT trimmed
    SPLIT_STRING(`keywords`,',',4) AS keyword_4,
    -- keyword 4, trimmed
    trim(SPLIT_STRING(`keywords`,',',4)) AS keyword_4_trimmed
FROM `test`;

在您的示例中使用它:

SELECT SPLIT_STRING(`identifier`,'_',2)  as identifier2,* FROM `table` 
WHERE `identifier` LIKE '000123_%'
ORDER BY SPLIT_STRING(`identifier`,'_',2) DESC

答案 1 :(得分:0)

在此特定答案中,您可以使用RIGHT(identifier,1)来获取最右边的字符。然后,您将使用右边的MAX()来找到最高的。但是,如果后缀最终是1个或更多个字符,则需要找到正确的正则表达式来捕获最后一个下划线之后的字符,然后采用该组的MAX()。

答案 2 :(得分:0)

您可以尝试此查询,在该查询中,您可以从varchar'identifier'的所有右侧值中进行比较来选择最高值。我的代码可能无法完全正常运行,因为我这里没有电脑。祝你好运!

SELECT *, select RIGHT(identifier,1) as rvalue  FROM `table` WHERE `identifier` LIKE '000123_%' and rvalue >= ALL (SELECT RIGHT(identifier,1) as rvalue  FROM `table`) t

答案 3 :(得分:0)

如果仅用于一组行,则可以应用:

order by char_length(identifier) desc, identifier desc 
limit 1

字符串越长,数字越大...