如果列是字母数字,则在sql查询中获取列中的最大值

如果列是字母数字,则在sql查询中获取列中的最大值,sql,sql-server,string,select,sql-order-by,Sql,Sql Server,String,Select,Sql Order By,这是我按项目名称列出的表,它包含3列: 估计的 名字 项目名称 我想根据estimateId 但是这里的estimateid是字母数字的。我怎样才能做到这一点 我需要一个SQL查询来实现这一点: 例如,estimateId包含如下值: Elooo1 Elooo2 ...... Elooo10 等等。那么我如何才能做到这一点呢?我今天刚开始使用SQL。。所以我完全是个新手,但我想我可以解决你的问题。我会这样做 按estimateId ASC从表顺序中选择名称、项目名称 或者(我想您

这是我按项目名称列出的表,它包含3列:

  • 估计的

  • 名字

  • 项目名称

  • 我想根据
    estimateId
    但是这里的
    estimateid
    是字母数字的。我怎样才能做到这一点

    我需要一个SQL查询来实现这一点:

    例如,
    estimateId
    包含如下值:

    Elooo1
    Elooo2
    ......      
    Elooo10 
    

    等等。那么我如何才能做到这一点呢?

    我今天刚开始使用
    SQL
    。。所以我完全是个新手,但我想我可以解决你的问题。我会这样做

    按estimateId ASC从表顺序中选择名称、项目名称

    或者(我想您需要按……说明订购)


    按estimateId DESC从表顺序中选择名称、项目名称

    您似乎想提取字符串的数字部分。假设字符串长度可变,且数字始终位于末尾,则可以执行以下操作:

    try_cast(
        substring(estimateId, patindex('%[0-9]%', estimateId), len(estimateId)) 
        as int
    )
    
    这将捕获从字符串中的第一个数字到字符串末尾的所有内容,并尝试将其转换为一个数字(如果转换失败,
    try\u cast()
    返回
    null
    ,而不是引发错误)

    不太清楚您想将此信息用于什么目的。例如,如果要对数据进行相应的排序,可以执行以下操作:

    select *
    from mytable
    order by try_cast(
        substring(estimateId, patindex('%[0-9]%', estimateId), len(estimateId)) 
        as int
    )
    

    设置测试数据

    DECLARE @tmpTable TABLE ( estimateId NVARCHAR(MAX));
    INSERT into @tmpTable(estimateId) VALUES ('Elooo1'),('Elooo2'),('Elooo3'),('Elooo4'),('Elooo5'),('Elooo6');
    
    根据模式分割数据

    SELECT T.prefix AS prefix, MAX(T.suffix) AS suffix, MAX(estimateId) AS estimateId FROM (SELECT estimateId,LEFT(estimateId, PATINDEX('%[a-zA-Z][^a-zA-Z]%', estimateId )) AS prefix,LTRIM(RIGHT(estimateId, LEN(estimateId) - PATINDEX('%[a-zA-Z][^a-zA-Z]%', estimateId ))) As suffix FROM @tmpTable) T GROUP BY T.prefix
    
    结果

    prefix  suffix  estimateId
    Elooo   6   Elooo6
    
    参考


    请用您正在使用的数据库标记您的问题:mysql、oracle、postgresql。。。?数据库产品的版本可能也是一个有用的信息。我今天刚开始使用
    SQL
    。。所以我完全是个新手,但我想我可以解决你的问题。我会这样做
    SELECT name,projectName从表顺序中按estimateId ASC
    SELECT name,projectName FROM table ORDER BY estimateId DESC
    读取
    ORDER BY
    命令我使用的是Microsoft sql server management studio 2017版本这会将
    'eloo2'
    放在
    'eloo10'
    之后,这可能不是OP想要的。对不起,我不知道,是的,它有数字错误。