SQL Server功能无法正常工作

问题描述

我有一个sql Server函数。当我将其用作查询命令时,它可以正常工作,但是当我放置一个函数时,它并非每次都起作用。

这是我的职能

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

但是当我选择

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

我做错什么了吗?

解决方法

您应该 从不 将SQL Server变量或参数定义为varcharnvarchar 没有 > 提供明确的长度!

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

所以替换掉它。

CREATE FUNCTION dbo.ConvertToFloat
    (@number_str nvarchar)

更明智的选择

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

或任何合适的长度对您而言-但您必须提供长度!