سؤال

وأنا باستخدام وظيفة sp_spaceused للحصول على تفاصيل من كافة الجداول في DB. العمود index_size يتم إرجاع VARCHAR الكامل مع "KB" في نهاية المطاف، ولكن أريد أن لعرضها في MB. كل ما تحتاج إلى معرفته هو كيفية تجريد خارج KB، ويمكنني أن تفعل بقية! : D

وUPDATE: أنا لا أشعر هذا هو نسخة مكررة من مسألة أخرى اقترح بينما كنت تبحث عن الحل SQL فقط، والتي أعطيت في هذا الموضوع

هل كانت مفيدة؟

المحلول

واستبدال (العمود، 'KB'، ''). لا حاجة لLEN وغيرها من الاشياء

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