0

SalaryActualYear不幸的是,我有一个带有列的表nvarchar(254)。我必须将其转换为双精度、浮点、数字或十进制。

我所做的:

SELECT 
       [FirstName]
      ,[LastName]
      ,[SalaryActualYear]
      ,cast(SalaryActualYear as  NUMERIC(2,2))
FROM [CW_StagingArea].[dbo].[tbl_LN_MBO_Master_Data]

SELECT 
       [FirstName]
      ,[LastName]
      ,[SalaryActualYear]
      ,cast(SalaryActualYear as DECIMAL(2,2))
FROM [CW_StagingArea].[dbo].[tbl_LN_MBO_Master_Data]

SELECT 
       [FirstName]
      ,[LastName]
      ,[SalaryActualYear]
      ,convert(FLOAT,SalaryActualYear)
FROM [CW_StagingArea].[dbo].[tbl_LN_MBO_Master_Data]

SELECT 
       [FirstName]
      ,[LastName]
      ,[SalaryActualYear]
      ,convert(DOUBLE ,SalaryActualYear)
FROM [CW_StagingArea].[dbo].[tbl_LN_MBO_Master_Data]

不幸的是,在每种情况下我都会收到一个错误:

将 nvarchar 转换为数字数据类型时出现算术溢出错误。

将 nvarchar 转换为数字数据类型时出现算术溢出错误。

将数据类型 nvarchar 转换为浮点数时出错。

消息 102,级别 15,状态 1,第 12 行
',' 附近的语法不正确。

所以我真的很困惑。请帮助我该怎么办。

4

2 回答 2

0

SELECT cast(Round(SalaryActualYear,2) as DECIMAL(2,2)) FROM [CW_StagingArea].[dbo].[tbl_LN_MBO_Master_Data]

在这里,基本上引入了nvarchar来存储扩展字符,例如来自中文的in。因此,如果您的字段包含该数据,您将遇到问题。

此外,此处的 ROUND 函数会将空字符串转换为等于 0 的十进制数。如果您也有该数据,则需要检查该数据。NULL 值将在此处自动处理。

这应该有效。

于 2013-11-15T08:45:49.977 回答
0

尝试这个 :

  declare @v nvarchar(50) = '21.89777777777777777777777777'

    select convert(decimal(18,2),round(@v,2))

you can also use isNumeric on the column to find the required data.

于 2013-11-15T08:37:15.973 回答