1

我将一些参数接收到存储过程中。这些参数是 NVARCHAR 的。

我有一个问题,当我需要将其中一些值转换为 FLOATS 时,因为它们被接收为例如

@VALUE1 NVARCHAR(100)

声明 @ChangedValue SET @ChangedValue = CAST(@Value1 AS FLOAT)

例如@Value1 = "0,001"

给我一个问题,因为它期望“0.001”

我无法更改输入的格式,但我可以在 SQL 服务器端以某种方式更改它吗?通过将所有“,”更改为“。” 反而?

最好的问候,肯恩

4

3 回答 3

3

你可以使用@VALUE1 = REPLACE(@VALUE1, ',', '.')

不过,这似乎是一件可怕的事情!

于 2008-11-20T10:02:05.737 回答
0

正如 Mitch 所说,这听起来不太好,如果提供的参数首先是 float 类型,那就更好了。他为您提供了解决您现在问题的解决方案,但正如他指出的那样,您将来可能会遇到一些麻烦。

我假设该过程由某些应用程序代码调用,并且我怀疑这些数字是用户输入的。如果是这种情况,那么转换应该发生在应用程序级别,因为这将处理区域设置,并且这是唯一可以控制用户输入格式的地方。

于 2008-11-20T12:13:02.977 回答
0

我不熟悉您的数据,但请确保您没有任何有效的逗号值,例如 1,000。使用 replace 将其更改为 1.000 会极大地改变所涉及的实际数字。

我会修复用户界面,以便不能在字段中放置无效数字。我还会在数据库中的表上设置一个约束,要求数字在一定范围内或在清理数据后为有效数字。这样一开始,不良数据就无法进入该领域。

于 2008-11-20T15:27:15.097 回答