Упорядочивание строки, содержащей целое число внутри SQL - PullRequest
3 голосов
/ 12 июня 2019

У меня есть содержимое ниже в таблице в SQL

enter image description here

Я пытался упорядочить по названию, но у меня ничего не вышло. Можно ли использовать какой-либо оператор SQL, чтобы можно было упорядочить по номеру внутри InterSciences Competition?

Ответы [ 3 ]

4 голосов
/ 12 июня 2019

Вы можете попробовать выполнить следующий запрос.

;WITH cte 
     AS (SELECT title, 
                Cast(Substring(title, Charindex('(', title) + 1, 
                     Charindex(')', title) - 
                     Charindex('(', title) - 1) 
                     AS INT) AS OC 
         FROM   yourtable) 
SELECT * 
FROM   cte 
ORDER  BY oc 

В приведенном выше запросе число в скобках извлекается и преобразуется в INT для заказа.

Демоверсия

2 голосов
/ 12 июня 2019

Используя SUBSTRING() и PATINDEX(), возможно упорядочение:

DECLARE @TestTable TABLE (TestVal VARCHAR (20));
INSERT INTO @TestTable (TestVal) VALUES ('Test (1)'), ('Test (10)'), ('Test (2)');

SELECT TestVal 
FROM @TestTable 
ORDER BY CAST(SUBSTRING(TestVal, PATINDEX('%[0-9]%', TestVal), LEN(TestVal) - PATINDEX('%[0-9]%', TestVal)) AS INT),
         LEFT(TestVal, PATINDEX('%[0-9]%', TestVal) - 2)

Выход:

TestVal
---------
Test (1)
Test (2)
Test (10)

Демонстрация на db <> fiddle

1 голос
/ 12 июня 2019

Вы также можете попробовать это:

declare @t table (title varchar(50))

insert into @t values ('InterSciences Competition (1)')
insert into @t values ('InterSciences Competition (10)')
insert into @t values ('InterSciences Competition (2)')


select * from @t
order by cast(replace(substring(title,CHARINDEX('(',title)+1,CHARINDEX(')',title)),')','') as INT) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...