我有一个名为T
的表中有一列A
。该列的类型为nvarchar(255)
。在SQL Server 2008中替换
此表上有一个触发器,将列A
中的值更新为表B
中的列B
。列B
的类型为float
。
假设如果在A
列值35.1 %
,我要脱光%
只有35.1
在B
列更新。对于A
列中的值,不一定有%
符号。
如何在SQL Server 2008中执行此操作?任何想法和建议都非常感谢!
我有一个名为T
的表中有一列A
。该列的类型为nvarchar(255)
。在SQL Server 2008中替换
此表上有一个触发器,将列A
中的值更新为表B
中的列B
。列B
的类型为float
。
假设如果在A
列值35.1 %
,我要脱光%
只有35.1
在B
列更新。对于A
列中的值,不一定有%
符号。
如何在SQL Server 2008中执行此操作?任何想法和建议都非常感谢!
您可以尝试使用下面的查询:如果你想在一个字符串中只得到数字试试这个功能
update B
set B.colB = cast(REPLACE(A.colA, '%', '') as float)
from A
where B.idB = A.idA
当我这样做时,我得到以下错误: – SaiBand 2012-02-07 21:55:44
@SaiBand这是错误? – Tim 2012-02-07 21:57:40
将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
select replace('35.3 %','%','')
或select replace('35.3 ','%','')
都将返回35.3
;只需相应地更改您的查询;是这样的:
update tableb
set b=replace(valuefromcola,'%','')
where condition
:
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
你应该把这在你的触发器内。请注意,您需要修改该功能才能接受。并且,字符(因为这些是在数量上有效)= - )
--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)))
update B
set B.colB = cast(REPLACE(A.colA, '%', '') as float)
from A
where B.idB = A.idA
如何表T细胞和B有关系吗?触发器触发更新或插入表T?它是将新行插入到表B中,还是仅更新现有行?当T.A中的值无法转换为浮点数时,您会做什么? – 2012-02-07 20:36:52
http://msdn.microsoft.com/en-us/library/ms186862.aspx – msmucker0527 2012-02-07 20:27:33