如何将Excel格式编号转换为数字(十进制或浮点数)?

时间:2016-08-15 07:49:40

标签: sql-server string tsql decimal

我有一个nvarchar(255)列,用于存储很久以前从excel导入的数字。

格式如下:

7,242
(4,011)
-
(24,120.2)
-
4,234,091

" - "在这里意味着0。

我目前正在使用"替换"使其转换为十进制

convert(decimal(18,4),RTRIM(LTRIM(replace(replace(replace(replace([Column a],'-',0),',',''),'(','-'),')',''))))

无论如何,我认为这有点愚蠢。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Query to get only numbers from a string中功能的修改版本来处理Excel值。

CREATE FUNCTION dbo.udf_GetNumeric
    (
     @strAlphaNumeric VARCHAR(256)
    )
RETURNS VARCHAR(256)
AS 
    BEGIN
       DECLARE @intAlpha INT
       SET @intAlpha = PATINDEX('%[^0-9.-]%', @strAlphaNumeric)
       BEGIN
          WHILE @intAlpha > 0 
             BEGIN
                SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha,
                                        1, '')
                SET @intAlpha = PATINDEX('%[^0-9.-]%', @strAlphaNumeric)
             END
       END       
       RETURN CASE WHEN ISNULL(@strAlphaNumeric,0)='-' THEN 0 ELSE CONVERT(DECIMAL(18,4),@strAlphaNumeric) END 
    END
GO

然后您可以按如下方式转换您的值:

SELECT dbo.udf_GetNumeric('7,242')
SELECT dbo.udf_GetNumeric('(4,011)')
SELECT dbo.udf_GetNumeric('-')
SELECT dbo.udf_GetNumeric('(24,120.2)')
SELECT dbo.udf_GetNumeric('-')
SELECT dbo.udf_GetNumeric('4,234,091')

实现不一定更好,但它可以更容易理解代码试图实现的目标。