2

OK、nvarchar で小数点以下 2 桁の数値があります。非常に単純な関数を実行すると、小数点以下の桁数がすべてゼロに変更され、停止する理由や方法がわかりません。

これが基本的な機能です(実際にはより大きな機能の一部ですが、これが私の問題の原因です)。

create FUNCTION [dbo].[z_test](@amt as nvarchar)
RETURNS decimal(18,4)
BEGIN 
declare @amt1 as decimal(18,4)
set @amt1=cast(@amt as decimal(18,4))
return @amt1
END

したがって、この SQL ステートメントを実行すると

select cast('3.48' as decimal(18,4)), dbo.z_test('3.48')

返される列は同じであると予想されます。しかし、私が得るのは 3.4800 3.0000 です

なぜこれが起こるのか、どうすれば変更できるのかについてのアイデアはありますか? これは SQL Server 2005 にあります。よろしくお願いします。

4

2 に答える 2

3

nvarchar関数パラメーターで長さを指定する必要があります。そうしないと、この場合は長さ 1 と見なされ、入力が切り捨てられます。

(@amt as nvarchar(10))
于 2012-04-19T14:13:56.433 に答える
3

入力変数が切り詰められています。

MSDN によると: http://msdn.microsoft.com/en-us/library/ms186939.aspx

n がデータ定義ステートメントまたは変数宣言ステートメントで指定されていない場合、デフォルトの長さは 1 です。CAST 関数で n が指定されていない場合、デフォルトの長さは 30 です。

サイズNVARCHARを指定すると、関数は期待どおりに機能します。

create FUNCTION [dbo].[z_test](@amt as nvarchar(10))
RETURNS decimal(18,4)
BEGIN 
declare @amt1 as decimal(18,4)
set @amt1=cast(@amt as decimal(18,4))
return @amt1
END
于 2012-04-19T14:15:21.133 に答える