SQL 服务器功能没有像我预期的那样工作

SQL Server function does not work as I expected

我有一个 SQL 服务器函数。当我使用 as 查询命令时,它工作正常,但是当我输入一个函数时,它每次都不起作用。

这是我的函数

CREATE FUNCTION dbo.ConvertToFloat
    (@number_str nvarchar)
RETURNS float
AS 
BEGIN
    RETURN CAST(REPLACE(REPLACE(REPLACE(@number_str, '$', ''), '%',''),',','') AS float);
END

示例:

select dbo.AmazonNumberStrToFloat('1234.12') // return 1

但是当我select

cast(replace(replace(replace(',123.45', '$', ''), '%',''),',','') as float) // return 1123.45

我做错了什么吗?

您应该永远将SQL服务器变量或参数定义为varcharnvarchar 没有提供明确的长度!

如果您省略长度 - 它将默认为 正好 1 个字符 - 这通常不是您想要或期望的。

所以替换这个。

CREATE FUNCTION dbo.ConvertToFloat
    (@number_str nvarchar)

用一些更明智的东西,比如

CREATE FUNCTION dbo.ConvertToFloat
    (@number_str NVARCHAR(25) )

或此处对您有意义的任何长度 - 但您必须提供一个长度!