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) для создания массива, а затем взять первый элемент массива