Удаление нечисловых символов в T-SQL
Вопрос
Я использую функцию sp_spaceused для получения сведений обо всех таблицах в БД. Столбец index_size - это VARCHAR, возвращаемый с завершением «КБ» в конце, однако я хочу отобразить в МБ. Все, что мне нужно знать, это как убрать КБ, я могу сделать все остальное! : D р>
ОБНОВЛЕНИЕ: я не считаю, что это дубликат другого предложенного вопроса, поскольку я искал решение только для SQL, которое было дано в этой теме.
Решение
ЗАМЕНИТЬ (столбец, «КБ», «»). Нет необходимости в ЛЕН и других вещах
В SQL 2005 это даст вам " зарезервированный " Значение: р>
SELECT
SUM(au.total_pages) / 128.0 AS UsedMB
FROM
sys.allocation_units au
Еще одно исследование должно позволить вам также считать индекс по сравнению с пространством данных из представлений catlog
Другие советы
Моей первой мыслью было бы просто сохранить переменную и просто использовать подстроку для удаления последних символов.
-- Setup
DECLARE @data VARCHAR(50)
SET @data = '159736 KB'
-- Computation
SET @data = SUBSTRING(@data, 1, LEN(@data)-2)
-- Conversion
SELECT CAST(@data AS INTEGER)
Более общее решение:
-- Test data
DECLARE @StrIn VARCHAR(100), @StrOut VARCHAR(100), @I INT, @Len INT
SELECT @StrIn = '123m43 5m409', @StrOut = '', @I = 0, @Len = Len(@StrIn)
-- Answer
WHILE (@I < @Len) BEGIN
SELECT @I = @I + 1,
@StrOut = @StrOut +
CASE
WHEN (CAST(ASCII(SUBSTRING(@StrIn, @I, 1)) AS INT) BETWEEN 47 AND 58)
THEN SUBSTRING(@StrIn, @I, 1) ELSE ''
END
END
SELECT @StrIn, @StrOut
Общее решение для T-SQL (SS 2008+), чтобы удалить все, кроме набора разрешенных символов:
DECLARE @StrIn varchar(20)='(323)-555-1212'; -- input value
DECLARE @Allowed varchar(20)='%[0123456789]%'; -- pattern for allowed characters.
DECLARE @Result varchar(20)=''; -- result
DECLARE @I int = patindex(@Allowed, @StrIn);
WHILE (@I>0)
begin
SET @Result = @Result + SUBSTRING(@StrIn, @I, 1); -- add allowed charcter.
set @StrIn = SUBSTRING(@StrIn, @I+1, 20); -- take rest of string.
SET @i = patindex(@Allowed, @StrIn);
END
PRINT @Result;
Это может быть легко заключено в скалярную функцию. Полностью общая функция будет принимать список разрешенных символов, или вы можете жестко написать специальный код (например, этот).