【问题标题】:How to convert a Excel format number to numeric(decimal or float)?如何将 Excel 格式的数字转换为数字(十进制或浮点数)?
【发布时间】:2016-08-15 07:49:39
【问题描述】:

我有一个 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),',',''),'(','-'),')',''))))

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

【问题讨论】:

  • 给出一个清晰的样本和一个清晰的样本结果也
  • 我们说的是 mssql (T-SQL) 吗? convert(money,'1,234,567.8',1) 转换格式化字符串 nice; convert(money,'-',1) 转换为 0 可以将结果转换为任意数值类型

标签: sql-server string tsql decimal


【解决方案1】:

您可以使用来自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')

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多