문제

DB의 모든 테이블의 세부 사항을 얻기 위해 SP_SPACEOSS 기능을 사용하고 있습니다. index_size 열은 끝에 'kb'로 완료되지만 MB로 표시하고 싶습니다. 내가 알아야 할 것은 KB를 제거하는 방법 뿐이며 나머지는 할 수 있습니다! :디

업데이트 : 나는 이것이 SQL 전용 솔루션을 찾고 있었기 때문에 제안 된 다른 질문의 복제품이라고 생각하지 않습니다.

도움이 되었습니까?

해결책

교체 (열, 'KB', ''). 렌과 다른 물건이 필요하지 않습니다

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;

이것은 스칼라 함수로 쉽게 캡슐화 될 수 있습니다. 완전히 일반적인 기능은 허용 된 문자 목록을 수락하거나 특별한 목적을 위해 하드 코딩 할 수 있습니다 (이와 같은).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top