Выберите наибольшее значение из смешанной строки / столбца int в хранимой процедуре? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть столбец как varchar. Я сохранил значение в нем следующим образом: -

P.ID
P1
P2
.
.
P6
.
P11 

Я хочу выбрать только самый высокий id из этого столбца, например: p11 - мой самый высокий идентификатор.

Мой существующий запрос:

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

Ответы [ 4 ]

1 голос
/ 27 марта 2019

Я думаю, что простой метод:

select top (1) pid
from p
order by len(pid) desc, pid desc;
0 голосов
/ 27 марта 2019

Попробуйте этот запрос:

select top 1 *
from P
order by cast(substring(P.ID, 2, len(P.ID)) as int) desc

Он просто упорядочивает по целому числу, содержащемуся в вашем столбце.

0 голосов
/ 27 марта 2019

Попробуйте

;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
0 голосов
/ 27 марта 2019

Согласно тому, что вы предоставляете, вы можете сделать

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

например:

WITH CTE AS
(
  SELECT 'P1' AS Col
  UNION
  SELECT 'P2'
  UNION
  SELECT 'P100'
)
SELECT MAX(CAST(RIGHT(Col, LEN(Col)-1) AS BIGINT))
FROM CTE;

Который вернется: 100

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...