Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从存储过程中的混合字符串/int列中选择最高值?_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql 从存储过程中的混合字符串/int列中选择最高值?

Sql 从存储过程中的混合字符串/int列中选择最高值?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我有一列名为varchar。我将值存储在其中,如下所示:- P.ID P1 P2 . . P6 . P11 我只想从此列中选择最高的id,例如:p11是我的最高id 我现有的查询是: SELECT top(1) P.ID as Result from P order by P.ID desc 根据你提供的,你可以做 SELECT MAX(CAST(RIGHT(YourColumn, LEN(YourColumn)-1) AS BIGINT)) FROM TBL; 例如: 将返回:100尝

我有一列名为
varchar
。我将值存储在其中,如下所示:-

P.ID
P1
P2
.
.
P6
.
P11 
我只想从此列中选择最高的
id
,例如:
p11
是我的最高id

我现有的查询是:

SELECT top(1) P.ID as Result from P order by P.ID desc

根据你提供的,你可以做

SELECT MAX(CAST(RIGHT(YourColumn, LEN(YourColumn)-1) AS BIGINT))
FROM TBL;
例如:

将返回:
100

尝试此查询:

select top 1 *
from P
order by cast(substring(P.ID, 2, len(P.ID)) as int) desc
它只是按列中包含的整数排序。

试试这个

;WITH CTE ([P.ID])
AS
(
SELECT 'P1' UNION ALL
SELECT 'P2' UNION ALL
SELECT 'P6' UNION ALL
SELECT 'P11' 
)
SELECT TOP 1 *
FROM CTE
ORDER BY  CAST(SUBSTRING([P.ID],PATINDEX('%[0-9]%',[P.ID]),LEN([P.ID])) AS INT) DESC
结果

P.ID
----
P11

我认为一个简单的方法是:

select top (1) pid
from p
order by len(pid) desc, pid desc;

将提供样本数据和预期结果helpful@Sreenu131提供了样本数据。预期输出为p11,因为它是该列的最高id
select top (1) pid
from p
order by len(pid) desc, pid desc;