Pergunta

Eu estou usando a função sp_spaceused para obter os detalhes de todas as tabelas em um DB. A coluna index_size é VARCHAR retornou completo com 'KB' no final, no entanto eu quero para exibir em MB. Todos necessidade I saber é como retirar o KB, eu posso fazer o resto! : D

UPDATE:. Eu não sinto que esta é uma duplicata da outra pergunta sugerida como eu estava à procura de um SQL única solução, que foi dada neste segmento

Foi útil?

Solução

Substituir (coluna, 'KB', ''). Não há necessidade de LEN e outras coisas

No SQL 2005, isso vai lhe dar o valor "reservado":

SELECT
    SUM(au.total_pages) / 128.0 AS UsedMB
FROM
    sys.allocation_units au

Alguns mais investigação deve permitir que você leia índice vs espaço de dados fora das vistas Catlog demasiado

Outras dicas

Meu primeiro pensamento seria apenas para armazenar em em uma variável e usar apenas substring para remover os últimos caracteres.

-- Setup
DECLARE @data VARCHAR(50)
SET @data = '159736 KB'

-- Computation
SET @data = SUBSTRING(@data, 1, LEN(@data)-2)

-- Conversion
SELECT CAST(@data AS INTEGER)

solução mais genérica:

-- 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

solução geral para a T-SQL (SS 2008+), para remover todos, mas um conjunto de caracteres permitidos:

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;

Esta poderia ser facilmente encapsulado em uma função escalar. Uma função completamente geral aceitaria a lista de caracteres permitido, ou você pode codificar para fins especiais (como este).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top