SQL-запрос для получения числового значения из поля varchar - PullRequest
1 голос
/ 10 января 2012

У меня есть столбец с именем Barname, в котором содержится текстовое имя всех проектов.

У всех проектов есть номер перед именем с полной остановкой между номером и текстом.

например

1.Project name one
2.Project name two
20.Project name twenty
50.Project name fifty

Мне нужно создать новый столбец, чтобы позволить мне сортировать по числовому значению, поэтому мне нужна команда, чтобы взять числовое значение из имени и игнорировать точку и текст.

Итак, мой новый столбик будет иметь (на основе приведенных выше примеров)

1
2
20
50

Ответы [ 4 ]

3 голосов
/ 10 января 2012

Используйте это выражение (в SQL, а не SSRS):

CAST(LEFT(MyColumn, CHARINDEX('.', MyColumn) - 1) AS int)

Изменить, не все строки имеют точки

CASE
   WHEN CHARINDEX('.', MyColumn) > 0 THEN
             CAST(LEFT(MyColumn, CHARINDEX('.', MyColumn) - 1) AS int)
   -- ELSE nothing, just let it be NULL because we can't apply the require logic
END
1 голос
/ 10 января 2012

Вот полный пример:

declare @test varchar(30)
select @test = '12.Project name one'

declare @res int

-- the command that you need is this
select @res = convert(int, substring(@test, 1, charindex('.', @test) - 1))


select @res
1 голос
/ 10 января 2012

Как насчет

ALTER t ADD COLUMN id INT

UPDATE t
SET id = SUBSTRING(column1, 1, CHARINDEX('.', column1) - 1)
0 голосов
/ 10 января 2012

Вы можете использовать explode ('.', $ String) для создания массива, а затем взять первый элемент массива

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