删除T-SQL中的数字字符

问题描述:

我正在使用函数sp_spaceused来获取数据库中所有表的详细信息。 index_size列是VARCHAR返回完成与'KB'的结尾,但我想以MB显示。我只需要知道如何去除KB,剩下的就可以完成了! :D删除T-SQL中的数字字符

更新:我不觉得这是建议的另一个问题的重复,因为我正在寻找一个仅在此线程中给出的SQL解决方案。

+0

可能重复:http://*.com/questions/106206/fastest-way-to-remove-non-numeric-characters-from-a-varchar-in -SQL-服务器 – 2015-05-05 14:51:18

REPLACE(column,'KB','')。无需LEN和其他的东西

2005年SQL,这会给你的“保留”值:

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

一些更多的调查应该让你阅读指数VS数据空间出来的目录下载观点太

我的第一个想法是只存储在一个变量,只是使用子字符串删除最后的字符。

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