2

DB内のすべてのテーブルの詳細を取得するために関数sp_spaceusedを使用しています。index_size列はVARCHARで返され、最後に「KB」が付いていますが、MBで表示したいと思います。私が知る必要があるのはKBを取り除く方法だけです、私は残りをすることができます!:D

更新:このスレッドで提供されたSQLのみのソリューションを探していたため、これが提案された他の質問と重複しているとは思いません。

4

4 に答える 4

1

私の最初の考えは、変数に格納し、部分文字列を使用して最後の文字を削除することです。

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

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

-- Conversion
SELECT CAST(@data AS INTEGER)
于 2009-03-05T11:44:38.600 に答える
1

REPLACE(列, 'KB', ''). LENやその他のものは必要ありません

SQL 2005 では、これにより「予約済み」の値が得られます。

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

さらに調査すると、カタログビューからもインデックスとデータスペースを読み取ることができるはずです

于 2009-03-05T11:51:43.077 に答える
0

より一般的な解決策:

-- 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
于 2009-03-05T11:56:51.037 に答える