0

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 をデータ型数値に変換すると、算術オーバーフロー エラーが発生します。

nvarchar をデータ型数値に変換すると、算術オーバーフロー エラーが発生します。

データ型 nvarchar を float に変換中にエラーが発生しました。

メッセージ 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 は基本的に、中国語などの拡張文字を格納するために導入されました。したがって、フィールドにそのデータが含まれている場合、問題が発生します。

また、ここの ROUND 関数は、空の文字列を 0 に相当する 10 進数に変換します。そのデータもある場合は、それを確認する必要があります。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 に答える