2012-02-07 108 views
0

我有一個名爲T的表中有一列A。該列的類型爲nvarchar(255)在SQL Server 2008中替換

此表上有一個觸發器,將列A中的值更新爲表B中的列B。列B的類型爲float

假設如果在A列值35.1 %,我要脫光%只有35.1B列更新。對於A列中的值,不一定有%符號。

如何在SQL Server 2008中執行此操作?任何想法和建議都非常感謝!

+0

如何表T細胞和B有關係嗎?觸發器觸發更新或插入表T?它是將新行插入到表B中,還是僅更新現有行?當T.A中的值無法轉換爲浮點數時,您會做什麼? – 2012-02-07 20:36:52

+0

http://msdn.microsoft.com/en-us/library/ms186862.aspx – msmucker0527 2012-02-07 20:27:33

回答

2

您可以嘗試使用下面的查詢:如果你想在一個字符串中只得到數字試試這個功能

update B 
set B.colB = cast(REPLACE(A.colA, '%', '') as float) 
from A 
where B.idB = A.idA 
+0

當我這樣做時,我得到以下錯誤: – SaiBand 2012-02-07 21:55:44

+0

@SaiBand這是錯誤? – Tim 2012-02-07 21:57:40

+0

將nvarchar值'33.6'轉換爲數據類型int.COMMANDTEXT:UPDATE [InterestRatesLookup] SET [Category] ​​= @@ Category,[Term] = @@ Term,[Value] = @@ Title,[Modified] = @@修改,[創建] = @@創建,[創建者] = @@作者,[修改者] = @@編者WHERE [ID] = 69 – SaiBand 2012-02-07 22:01:59

0

select replace('35.3 %','%','')select replace('35.3 ','%','')都將返回35.3;只需相應地更改您的查詢;是這樣的:

update tableb 
set b=replace(valuefromcola,'%','') 
where condition 
0

CREATE Function [dbo].[GetNumbersFromString](@Temp VarChar(1000)) 
Returns VarChar(1000) 
AS 
Begin 

    While PatIndex('%[^0-9]%', @Temp) > 0 
     Set @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '') 

    Return @TEmp 
End 

你應該把這在你的觸發器內。請注意,您需要修改該功能才能接受。並且,字符(因爲這些是在數量上有效)= - )

0
--trim trailing non-alphanumeric chars 
DECLARE @input nvarchar(4000) 
    SET @input = ',,, a word $$$' 

SELECT REVERSE(SUBSTRING(REVERSE(@input), PATINDEX('%[a-zA-Z0-9]%', REVERSE(@input)), LEN(@input))) 
0
update B 
set B.colB = cast(REPLACE(A.colA, '%', '') as float) 
from A 
where B.idB = A.idA