如果列是字母数字,则在sql查询中获取列中的最大值
这是我按项目名称列出的表,它包含3列:如果列是字母数字,则在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从表顺序中选择名称、项目名称 或者(我想您
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想要的。对不起,我不知道,是的,它有数字错误。