问题描述
我有一个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变量或参数定义为varchar
或nvarchar
没有 > 提供明确的长度!
如果省略长度-默认为 1个字符-通常不是您想要或期望的。
所以替换掉它。
CREATE FUNCTION dbo.ConvertToFloat
(@number_str nvarchar)
更明智的选择
CREATE FUNCTION dbo.ConvertToFloat
(@number_str NVARCHAR(25) )
或任何合适的长度对您而言-但您必须提供长度!