2016-09-28 162 views
0
update policy 
    set EstimatedPremium = cast(etl.estpremium as Numeric(19,4)) 
    from policy p join 
     etlpolicy etl 
     on p.policynumber = etl.policynumber 

我想在一個表policy從另一列在表etlpolicy更新一列數字。在目標列中,數據類型是Numeric(19,4),而源列是varchar(20)。錯誤轉換數據類型爲varchar,同時更新列

我得到的消息:

錯誤轉換數據類型爲varchar浮動

誰能告訴我什麼,我做錯了什麼?

+0

您的查詢不起作用嗎? –

+0

varchar2是一個oracle數據類型,而不是SQL Server? – Bridge

+0

它是varachar(20)不是它給同樣的錯誤轉換數據類型varchar到數字 –

回答

0

您的查詢很好,除了update。您需要使用表別名:

update p 
-------^ 
    set EstimatedPremium = cast(etl.estpremium as Numeric(19,4)) 
    from policy p join 
     etlpolicy etl 
     on p.policynumber = etl.policynumber; 
0

您可以檢查第二個表(etlpolicy)上的值是否都可以轉換爲數字?

另外:他們是否根據您的文化使用正確的小數點分隔符?例如:「1.950,00」可能會使您的環境複雜化。

您可以:

select cast(etl.estpremium as Numeric(19, 4)) prm 
from etlpolicy etl 

甚至,我認爲SQL Server有IsNumeric函數(我沒有測試):

select IsNumeric(etl.estpremium) prm, etl.estpremium 
from etlpolicy etl 

它應該用於非數字值返回0 。

+0

是第二個工作IsNumeric,它返回的值,但我怎麼能更新該值policytable –

+0

你可以嘗試'cast(etl .estpremium as float)'? –

+0

...正如'更新p集EstimatedPremium = cast(etl.estpremium as float)...' –

相關問題