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服务器变量或参数定义为varchar
或nvarchar
没有提供明确的长度!
如果您省略长度 - 它将默认为 正好 1 个字符 - 这通常不是您想要或期望的。
所以替换这个。
CREATE FUNCTION dbo.ConvertToFloat
(@number_str nvarchar)
用一些更明智的东西,比如
CREATE FUNCTION dbo.ConvertToFloat
(@number_str NVARCHAR(25) )
或此处对您有意义的任何长度 - 但您必须提供一个长度!
我有一个 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服务器变量或参数定义为varchar
或nvarchar
没有提供明确的长度!
如果您省略长度 - 它将默认为 正好 1 个字符 - 这通常不是您想要或期望的。
所以替换这个。
CREATE FUNCTION dbo.ConvertToFloat
(@number_str nvarchar)
用一些更明智的东西,比如
CREATE FUNCTION dbo.ConvertToFloat
(@number_str NVARCHAR(25) )
或此处对您有意义的任何长度 - 但您必须提供一个长度!