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

lpwwtiir  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(236)

这是我用project命名的表,它包含3列:
估计ID
名称
项目名称
我想从sql数据库中获取基于最大值的数据 estimateId 但是在这里 estimateid 是字母数字。我怎样才能做到这一点。
我需要一个sql查询来实现这一点:
例如 estimateId 包含如下值:

Elooo1
Elooo2
......      
Elooo10

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

8hhllhi2

8hhllhi21#

设置测试数据

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

参考
使用sql拆分字母和数字

pkln4tw6

pkln4tw62#

我刚开始 SQL 就像今天。。所以我完全是个新手,但我想我能解决你的问题。我会这样做 SELECT name, projectName FROM table ORDER BY estimateId ASC 或者(我想你需要 ORDER BY ... DESC ) SELECT name, projectName FROM table ORDER BY estimateId DESC

sauutmhj

sauutmhj3#

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

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
)

相关问题