我在存储过程中收到一些参数。这些参数是NVARCHAR的。
我有一个问题,当我需要将其中一些值转换为FLOATS时,因为它们正在被接收,例如。
@ VALUE1 NVARCHAR(100)
DECLARE @ChangedValue SET @ChangedValue = CAST(@ Value1 AS FLOAT)
E.g。 @ Value1 =“0,001”
给我一个问题,因为它预计会有“0.001”
我无法更改输入的格式,但我可以在SQL服务器端以某种方式更改它吗?通过将所有“,”更改为“。”代替?
最好的问候,肯恩
答案 0 :(得分:3)
您可以使用@VALUE1 = REPLACE(@VALUE1, ',', '.')
这确实是一件可怕的事情!
答案 1 :(得分:0)
正如Mitch所说听起来不那么好,而且提供的参数首先是float类型会更好。他给你的解决方案现在解决了你的问题,但正如他指出的那样,你可能会在将来遇到麻烦。
我假设某些应用程序代码调用了该过程,我怀疑这些数字是用户输入的。如果是这种情况,那么转换应该在应用程序级别上进行,因为它将处理区域设置,并且这是唯一可以控制用户输入格式的地方。
答案 2 :(得分:0)
我不熟悉您的数据,但请确保您没有任何对逗号有效的值,例如1,000。使用replace将其更改为1.000会大大改变实际数量。
我会修复用户界面,以便无法在字段中放置无效数字。我还会在数据库中的表上设置一个约束,要求数据在一定范围内,或者在清理数据后需要有效数字。那样糟糕的数据就无法开始进入该领域。