【问题标题】:Get maximum value in a column in sql query if the column is alphanumeric如果列是字母数字,则在 sql 查询中获取列中的最大值
【发布时间】:2020-09-30 21:26:37
【问题描述】:

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

  1. estimateId

  2. 姓名

  3. 项目名称

我想根据estimateId 的最大值从 SQL 数据库中获取数据 但这里estimateid 是字母数字。我怎样才能做到这一点。

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

例如estimateId 包含如下值:

Elooo1
Elooo2
......      
Elooo10 

等等。那么我该如何实现呢?

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题:mysql、oracle、postgresql...?数据库产品的版本也可能是有用的信息。
  • 我像今天一样刚开始SQL.. 所以我完全是新手,但我想我可以解决你的问题。我会做这样的事情SELECT name, projectName FROM table ORDER BY estimateId ASCSELECT name, projectName FROM table ORDER BY estimateId DESC 阅读ORDER BY 命令w3schools.com/sql/sql_orderby.asp
  • 我用的是微软sql server management studio 2017版

标签: sql sql-server string select sql-order-by


【解决方案1】:

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

SELECT name, projectName FROM table ORDER BY estimateId ASC

或者(我想你需要ORDER BY ... DESC

SELECT name, projectName FROM table ORDER BY estimateId DESC

【讨论】:

  • 这会将'Elooo2' 放在 'Elooo10'之后,这可能不是OP想要的。
  • 对不起,我不知道,是的,它得到了数字错误。
【解决方案2】:

您似乎希望提取字符串的数字部分。假设字符串具有可变长度,并且数字始终位于末尾,您可以这样做:

try_cast(
    substring(estimateId, patindex('%[0-9]%', estimateId), len(estimateId)) 
    as int
)

这会捕获从字符串中的第一个数字到字符串末尾的所有内容,并尝试将其转换为数字(如果转换失败,try_cast() 返回null 而不是引发错误)。

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

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

【讨论】:

    【解决方案3】:

    设置测试数据

    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
    

    参考

    split alpha and numeric using sql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多