Как найти MIN и MAX значений int как подстроки в SQL? - PullRequest
0 голосов
/ 17 сентября 2018

Например, у меня есть следующая таблица:

  pc   |   cd
---------------
  pc0  |   4x
  pc1  |   24x
  pc2  |   8x
  pc3  |   4x
  pc4  |   24x

Мне нужно получить что-то вроде этого:

 cd_max
--------
   24x

или отсортировать:

  pc   |   cd
---------------
  pc0  |   4x
  pc3  |   4x
  pc2  |   8x
  pc1  |   24x
  pc4  |   24x

'24x', очевидно, строка, но мне нужно получить максимум / минимум целых чисел внутри нее.

Я использую MS SQL Server.

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

схема:

create table Detail (pc varchar(100) ,cd varchar(100) );
insert into Detail values ('pc0','4x');
insert into Detail values ('pc1','24x');
insert into Detail values ('pc2','8x');
insert into Detail values ('pc3','4x');
insert into Detail values ('pc4','24x');

sql: я предполагаю, что только последний символ не является цифрой

  select * from Detail order by cast(left(cd,len(cd)-1) as int)

вывод:

pc  cd
pc0 4x
pc3 4x
pc2 8x
pc4 24x
pc1 24x

sql2: получитьмакс кд

select top(1) cd as cd_max from Detail order by cast(left(cd,len(cd)-1) as int) desc

выход:

cd_max
24x
0 голосов
/ 17 сентября 2018

Если все в порядке, предполагая, что строка всегда будет заканчиваться на x, я бы обрезал ее, преобразовал строку в число, нашел максимум и снова набрал x:

SELECT MAX(CAST(LEFT(cd, LEN(cd) - 1) AS INT)) + 'x'
FROM   mytable
0 голосов
/ 17 сентября 2018

Кусочек трейлинга x и приведение varchar к int следующим образом:

cast(left(cd, len(cd) - 1) as int)

Теперь вы можете заказать по этому значению и выбрать самое большое:

select top 1 cd as cd_max
from my_table
order by cast(left(cd, len(cd) - 1) as int) desc
0 голосов
/ 17 сентября 2018

Вы можете попытаться повторить 'x' только оставьте int. сравнить или получить макс.

SELECT CONCAT(MAX(CAST(REPLACE(cd,'x','') as int)) , 'x') cd_max
FROM T

или

SELECT *
FROM T
ORDER BY CAST(REPLACE(cd,'x','') AS INT) 
...