SQL-запрос для получения числового значения из поля varchar

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

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

например

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

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

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

1
2
20
50

4 ответа

Решение

Используйте это выражение (в 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

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

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

Как насчет

ALTER t ADD COLUMN id INT

UPDATE t
SET id = SUBSTRING(column1, 1, CHARINDEX('.', column1) - 1)

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

Другие вопросы по тегам