-2

SQL Server 2000 の使用

小数点以下の長さを短くしたい

クエリ

Select 23/12 as total

出力は次のように表示されます1.99999999999

値を丸めたくない、このように表示したい1.99

試したクエリ

Select LEFT(23/12, LEN(23/12) - 3) as total

上記のクエリは、12.444444 のような 10 進数の値がある場合にのみ機能しますが、合計が 12 または 4 または 11 のような 1 桁の場合、実行時にエラーが発生します。

これを行う方法。

クエリのヘルプが必要

4

2 に答える 2

2

非常に簡単な解決策があります。BOLで見つけることができます。Round は、オプションの 3 番目の引数 (ラウンド型) を取ります。値は四捨五入または切り捨てです。

ROUND 数値式 , 長さ [ ,関数 ] )

...

function 実行する操作のタイプです。function は tinyint、smallint、または int でなければなりません。function が省略されているか、値が 0 (デフォルト) の場合、numeric_expression は丸められます。0 以外の値が指定された場合、numeric_expression は切り捨てられます。

だからただする

Select ROUND(cast(23 as float)/12, 2, 1) as total

すると 1.91 になります。本当に 1.999 が表示されている場合は、コンピュータに何か問題があることに注意してください。23/12 = 1.916666666(無限)。SQLはそれらが整数であると想定し、それ以外の場合は整数除算を行うため、数値の1つをfloatとしてキャストする必要があります。もちろん、両方を float としてキャストすることもできますが、一方が float である限り、もう一方も変換されます。

于 2012-05-11T20:43:26.313 に答える
1

それほどエレガントではありませんが、すべての場合に機能します。

CONVERT(float、LEFT(CONVERT(nvarchar、23.0 / 12.0)、CHARINDEX('。'、CONVERT(nvarchar、23.0 / 12.0))+ 2))を合計として選択します

スカラー関数

-- Description: Truncate instead of rounding a float
-- SELECT dbo.TruncateNumber(23.0/12.0,2)
-- =============================================
CREATE FUNCTION TruncateNumber
(
    -- Add the parameters for the function here
    @inFloat float,
    @numDecimals smallint
)
RETURNS float
AS
BEGIN
    IF (@numDecimals < 0)
    BEGIN
        SET @numDecimals = 0
    END
    -- Declare the return variable here
    RETURN CONVERT(float,LEFT(CONVERT(nvarchar, @inFloat),CHARINDEX('.',CONVERT(nvarchar, @inFloat)) + @numDecimals)) 

END
GO
于 2012-05-11T20:09:14.350 に答える