DB内のすべてのテーブルの詳細を取得するために関数sp_spaceusedを使用しています。index_size列はVARCHARで返され、最後に「KB」が付いていますが、MBで表示したいと思います。私が知る必要があるのはKBを取り除く方法だけです、私は残りをすることができます!:D
更新:このスレッドで提供されたSQLのみのソリューションを探していたため、これが提案された他の質問と重複しているとは思いません。
私の最初の考えは、変数に格納し、部分文字列を使用して最後の文字を削除することです。
-- Setup
DECLARE @data VARCHAR(50)
SET @data = '159736 KB'
-- Computation
SET @data = SUBSTRING(@data, 1, LEN(@data)-2)
-- Conversion
SELECT CAST(@data AS INTEGER)
REPLACE(列, 'KB', ''). LENやその他のものは必要ありません
SQL 2005 では、これにより「予約済み」の値が得られます。
SELECT
SUM(au.total_pages) / 128.0 AS UsedMB
FROM
sys.allocation_units au
さらに調査すると、カタログビューからもインデックスとデータスペースを読み取ることができるはずです
より一般的な解決策:
-- 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