我的表格包含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
附近的语法不正确
','。
所以我真的很困惑。请帮帮我,我该怎么做。
答案 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值将在此处自动处理。
这应该有用。