我的桌子是:
查询后:
SELECT * FROM `table` WHERE `identifier` LIKE '000123_%'
我得到:
如何通过查询获得具有最大后缀的行,即000123_ 5 。
答案 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
字符串越长,数字越大...