无法将nvarchar转换为double等

时间:2013-11-15 08:30:53

标签: sql sql-server-2008

我的表格包含SalaryActualYear列,遗憾的是nvarchar(254)。我必须将它转换为double,float,numeric或decimal。

我的所作所为:

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转换为数据类型numeric的算术溢出错误。

     

将nvarchar转换为数据类型numeric的算术溢出错误。

     

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

     

Msg 102,Level 15,State 1,Line 12
  ','。

附近的语法不正确

所以我真的很困惑。请帮帮我,我该怎么做。

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

选择       cast(Round(SalaryActualYear,2)as DECIMAL(2,2)) FROM [CW_StagingArea]。[dbo]。[tbl_LN_MBO_Master_Data]

这里,基本上引入了nvarchar来存储来自中文的扩展字符。因此,如果您的字段包含该数据,则会出现问题。

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

这应该有用。