Domanda

Sto usando la funzione sp_spaceused per ottenere i dettagli di tutte le tabelle in un DB. La colonna index_size è VARCHAR restituita completa con 'KB' alla fine, tuttavia voglio visualizzare in MB. Tutto quello che devo sapere è come eliminare la KB, posso fare il resto! : D

AGGIORNAMENTO: Non credo che questo sia un duplicato dell'altra domanda suggerita mentre cercavo una soluzione solo SQL, che è stata data in questo thread.

È stato utile?

Soluzione

SOSTITUISCI (colonna, 'KB', ''). Non c'è bisogno di LEN e altre cose

Su SQL 2005, questo ti darà il "riservato" Valore:

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

Qualche ulteriore indagine dovrebbe consentire di leggere anche l'indice rispetto allo spazio dati dalle viste catlog

Altri suggerimenti

Il mio primo pensiero sarebbe di archiviare in una variabile e usare solo la sottostringa per rimuovere gli ultimi caratteri.

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

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

-- Conversion
SELECT CAST(@data AS INTEGER)

Soluzione più generica:

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

Soluzione generale per T-SQL (SS 2008+), per rimuovere tutti tranne un set di caratteri consentiti:

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;

Questo potrebbe essere facilmente incapsulato in una funzione scalare. Una funzione completamente generale accetterebbe l'elenco dei caratteri consentiti, oppure potresti codificare per scopi speciali (come questo).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top