2012-02-07 111 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